📌 목차 1️⃣ 싱글턴 패턴 2️⃣ 옵저버 패턴 3️⃣ 프록시 패턴 직접 구현하기 보다는 구현된 것을 사용하게 되는 패턴을 알아보자! ❕ 구현방법보다는 언제 사용되고 어떤 장단점이 있는지를 위주로 공부! 1️⃣ 싱글턴 패턴 : 해당 클래스의 인스턴스를 오직 하나만 만들 수 있도록 제한하는 패턴 싱글턴 클래스는 다른 쓰레드와 공유되어도 문제없는 메서드만 존재해야함 (무상태) 참조변수가 있더라도 코드의 흐름에 영향(ex. if문에서 분기로 사용)이 없다면 OK (동시성 문제가 없기 때문에) 💁🏻♀️ 왜 객체를 싱글턴으로 만들까? 💡 인스턴스를 새로 생성한다는 것은 자원(메모리, 시간)을 소모 → 즉, 자원을 절약하기 위해 사용 (자원을 보호) 🔎 싱글턴 패턴이 사용되는 곳 : Spring Bean, Thr..

📌 목차 1️⃣ 디자인 패턴 2️⃣ 어댑터 패턴 3️⃣ 퍼사드 패턴 4️⃣ 전략 패턴 객체지향 개념들이 실제로 어떤 형태로 사용되는지 알고 싶다면? 1️⃣ 디자인 패턴 디자인 → 설계 패턴 → 자주 반복되는 것(패턴) ➡️ 설계 과정에서 자주 반복되는 코드의 형태를 패턴으로 정의해 놓은 것 (효과적이라고 생각되는 것만) 💁🏻♀️ 디자인 패턴 왜(Why) 쓰는데? ✔️ 실무에서 자주 겪는 문제들을 해결할 수 있는 검증된 문제 해결 방법! → 바퀴를 재발명하지 마라!! ✔️ 효율적인 커뮤니케이션 → 디자인 패턴의 이름만 말하면 개발자들은 같은 코드를 떠올릴 수 있음 ❗ but 모든 코드에 디자인 패턴을 적용하려 하지 마라!! (필요할 때만 잘 사용하기) 🔎 디자인 패턴을 나누는 분류 생성을 위한 패턴 : ..

📌 목차 1️⃣ SOLID 2️⃣ SRP, 단일 책임 원칙 3️⃣ OCP, 개방-폐쇄 원칙 4️⃣ LSP, 리스코프 치환 원칙 5️⃣ ISP, 인터페이스 분리 원칙 6️⃣ DIP, 의존 역전 원칙 1️⃣ SOLID 객체지향 프로그래밍의 목표는 결합도는 낮고, 응집도는 높은 프로그램을 만드는 것! 그렇게 하기 위한 가이드가 바로 SOLID SRP : Single Responsibility Principle OCP : Open Closed Principle LSP : Lskov Substituion Principle ISP : Interface Segregation Principle DIP : Dependency Inversion Principle 🖐🏻 객체지향 4대 원칙 - 객체지향 프로그래밍의 근간을 이..

📌 목차 1️⃣ 의존 관계 2️⃣ 의존 역전 3️⃣ 의존 주입 패턴 4️⃣ 의존성을 주입 해주는 주체 1️⃣ 의존 관계 💁🏻♀️ 의존이 뭔데? 💡 한쪽(B)의 변경사항이 다른 한쪽(A)에도 영향을 미칠 때, A는 B에 의존한다고 말함 🔎 의존 관계가 형성되는 경우 : 어떤 클래스가 다른 클래스(or 인터페이스)를 사용할 때 (1) 다른 클래스의 레퍼런스 변수를 사용하는 경우 (ex. B b;) public class A { private B b; } (2) 다른 클래스의 인스턴스를 생성하는 경우 (ex. new B()) public class A { private InterfaceB b = new B(); // B는 InterfaceB 인터페이스를 구현 } (3) 다른 클래스를 상속받는 경우 publi..
📌 목차 1️⃣ if문 제거하기 2️⃣ getter와 setter 3️⃣ stream API 4️⃣ stream API와 Optional 1️⃣ if문 제거하기 ❗ 너무 많은 if문은 코드 가독성을 해침 → 수정, 디버깅이 어려워짐 👩🏻🏫 중구난방 IF문 개선해보자! CalculateType calculateType = calculateCommand.getCalculateType(); int num1 = calculateCommand.getNum1(); int num2 = calculateCommand.getNum2(); int result = 0; if(calculateType != null && calculateType.equals(CalculateType.ADD)) { result = num1 +..
📌 목차 1️⃣ 객체지향적으로 개발해야 하는 이유 2️⃣ 클래스와 상속 3️⃣ 추상 클래스와 인터페이스 4️⃣ Enum 5️⃣ 예외 6️⃣ Object 클래스 7️⃣ Optional 어떤 기술을 새로 도입할 때는, (1) 그걸 왜 도입해야 하는가? (배경) (2) 도입해서 얻을 수 있는 것은 무엇인가? (장점) (3) 도입할 때 지불해야 하는 비용은? (단점) 을 생각해 봐야 함! 1️⃣ 객체지향적으로 개발해야 하는 이유 💡 그럼 우리는 왜 객체지향 패러다임을 도입해야 하는가? : (배경) 절차지향 프로그래밍의 문제를 해결하기 위해 도입 🔎 절차지향 프로그래밍의 문제 ✔️ 데이터와 그 데이터에 접근할 수 있는 함수 사이에 연관 관계가 낮음 → 중복된 코드 발생 → 데이터를 캡슐화할 수 없음 ✔️ 테스트 ..