반응형
목록
간단하고 쉽게 (49)
[꼼꼼한 개발자] 꼼코더
🧹 쉬운 정리 1. useReducer()는 useState()와 같은 상태 관리, 상태 업데이트 훅(Hook)이다. 2. 변경할 값이 많을 때(상태 업데이트) 즉 상태 관리할 데이터가 많아질 때 사용을 고민해 볼 필요가 있다. 3. 좀 더 구조화된 방식으로 상태를 관리하고 싶을 때 사용할 수 있다. ( 예) "PLUS" 타입 은 무조건 더하기) 4. 선언형태 : const [state, dispatch] = useReducer(reducer, initialState); state : 상태 이름 (컴포넌트에서 사용할 상태) > 빵(재료) 담는 접시 dispatch : 상태(state)를 변경 시 필요한 정보를 전달하는 '함수' > 주문서 reducer : dispatch를 확인해서 state를 변경해 주..
💁🏻♂️ 간단 정리 컴파일 : 고급언어에서(Highlevel) -> 저급언어(Lowlevel)로 번역 컴파일 언어 : JavaScript, Python, R, Ruby 등 인터프리터 : 코드를 번역 없이 즉시 한 줄씩 실행 인터프리터 언어 : Java, C#, C++ (자세한 내용은 아래참고) 고급언어와 저급어란? 간단하고 쉽게 이해하기! (아래글 참고) [languages] - 고급언어란? 저급언어란? 간단하고 쉽게 이해하기(고급언어 저급언어 차이점) 💁🏻♂️ 소개 프로그래밍 언어를 크게 고급언어와 저급언어 2가지로 분류된다. 2가지의 차이점을 정말 간단하게 알아보자! ⚱️ 고급언어 (High-Level Language) 고급언어는 사람이 이해하기 쉬 ccomccomhan.tistory.com 🧑🏻..
💁🏻♂️ 소개 프로그래밍 언어를 크게 고급언어와 저급언어 2가지로 분류된다. 2가지의 차이점을 정말 간단하게 알아보자! ⚱️ 고급언어 (High-Level Language) 고급언어는 사람이 이해하기 쉬운 형태로 작성된 프로그래밍 언어이다. 예) C++, Java, Ruby 등 a = 12; b = a; c = a + b; 🥉 저급언어 (Low-Level Language) 저급언어는 컴퓨터가 이해하기 쉬운 형태의 언어이다. 예) 기계어나 어셈블리어 저급언어를 사용하면 하드웨어의 세부 사항을 직접 다룰 수 있어 최적화된 프로그램을 작성할 수 있다. section .data a db 12 ; 변수 a를 12로 초기화 section .bss b resb 1 ; 변수 b를 1바이트 크기로 선언 c resb 1..
🧹 간단 정리 의존성 주입 방법을 선택할 땐 중 생성자 주입을 사용하자 생성자 주입은 코드의 유지 보수성과 테스트 용이성을 향상한다. (자세한 내용은 아래 👀) 🧑🏻💻 코드 예제 👉🏻 Setter 방식(생성자 주입 적용 전) public class UserService { private UserRepository userRepository; public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } } 👉🏻 생성자 주입 적용 public class UserService { private final UserRepository userRepository; public UserServ..
🧹 간단 요약 DIP란 구체화의 의존하지 말고 추상화의 의존하는 것. 쉽게 말해 "구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻" (자세한 내용은 아래에) 🤷🏻 DIP란?(Dependency inversion principle) DIP는 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 되며 양쪽 모듈 모두 추상화에 의존해야 한다는 원칙이다. 즉, 의존성은 추상화에 의존해야 하며, 세부 구현에 의존해서는 안 된다는 것을 의미한다. 쉽게 말 해 "구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻" 🙋🏻♂️ DIP에 의거한 인터페이스 의존 방법 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 된다. 두 모듈은 모두 추상화에 의존해야 한다. 추상화는 세부 구현에 의존해서는 안 된다. ..
🧹 간단 요약 ISP란 인터페이스를 작은 단위로 분리하는 것이다. 즉 인터페이스를 계속 잘게 '잘' 나누어 분리하는 것이다. '특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다' -인프런 김영한 님 강의 속 내용- (자세한 내용은 아래에) 🤷🏻 ISP란?(Interface segregation principle) ISP는 클라이언트가 필요로 하는 인터페이스를 작은 단위로 분리하고 클라이언트가 필요로 하지 않는 기능에 대한 의존성을 제거하는 것을 강조한다. 🙋🏻♂️ ISP에 의거한 인터페이스 분리방법 클라이언트가 사용하는 기능에만 포함된 작은 인터페이스를 정의해야 한다 인터페이스는 클라이언트에게 필요한 최소한의 기능만 제공해야 한다. 클라이언트는 자신이 사용하지 않는 기능에 대한..
🧹 간단 요약 OCP란 확장에는 개방되어 있어야 하고 수정에는 폐쇄되어야 한다는 원칙을 의미 즉 새로운 기능이 추가되더라도 기존 코드를 수정하지 않고 확장할 수 있어야 한다. 정말 쉽고 자세히 다시 말하자면 "인터페이스와 추상화 등을 사용하여 다형성을 적용해 기능을 확장하고 코드 변경을 최소화하는 것이 개방 폐쇄의 원칙" (자세한 내용은 아래에) 🤷🏻 OCP란?(Open-Closed Principle) OCP는 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해서는 개방되어 있어야 하고 수정에 대해서는 폐쇄되어야 한다는 원칙을 의미한다. OCP의 아이디어는 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 한다는 것이다. 즉, 기존의 코드는 확장에 대해서 개방되어야 하며, 새로운 기능이..
🚨 문제 발생 [피파 프로젝트] 개발 도중 이상한 현상이 일어났었다 분명 엔드 매핑 주소(첫 요청 시작 주소)가 'users'로 설정하였는데 'user'로 첫 요청을 하여도 정상적으로 동작한다는 것이었다.. (aaa, bbb, adfdagb로 해도 전부 동일하다) 따라서 코드를 확인해 보았다. 😁 코드 확인(원인 발견) 이상한 점을 눈치챘는가..!?!? 그렇다.. '{}'를 붙여 놓은 것이었다.. 이렇게 되면 '변수'로 인식하여 아무런 단어가 들어와도 처리가 돼버린다.ㅠ 🧑🏻💻 해결 수정하였다.(매우 부끄러워지는 상황 하핳..)