6️⃣ 불필요한 객체 생성을 피하라 public void method() { String s = new String("gamja"); // method()를 호출할 때마다 String 객체가 새로 생성! System.out.println("gamja"); } 똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다 (위의 예시로는 new String() 대신 ""리터럴을 사용해야함) ➡️ 정적 팩터리 메서드를 사용해 불필요한 객체 생성을 막을 수도 있다! (생성자(new)를 사용하면 빼도박도 못하고 객체 생성!) ➡️ 생성비용이 비싼 객체는 캐싱해서 재사용! (멤버변수로 저장) (ex. HashMap의 keySet()메서드에서 반환되는 Set) ➡️ 박싱된 기본타입보다는 기본..

https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 0️⃣ 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다. 준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가..
📌 목차 1️⃣ 싱글턴 패턴 2️⃣ 옵저버 패턴 3️⃣ 프록시 패턴 직접 구현하기 보다는 구현된 것을 사용하게 되는 패턴을 알아보자! ❕ 구현방법보다는 언제 사용되고 어떤 장단점이 있는지를 위주로 공부! 1️⃣ 싱글턴 패턴 : 해당 클래스의 인스턴스를 오직 하나만 만들 수 있도록 제한하는 패턴 싱글턴 클래스는 다른 쓰레드와 공유되어도 문제없는 메서드만 존재해야함 (무상태) 참조변수가 있더라도 코드의 흐름에 영향(ex. if문에서 분기로 사용)이 없다면 OK (동시성 문제가 없기 때문에) 💁🏻♀️ 왜 객체를 싱글턴으로 만들까? 💡 인스턴스를 새로 생성한다는 것은 자원(메모리, 시간)을 소모 → 즉, 자원을 절약하기 위해 사용 (자원을 보호) 🔎 싱글턴 패턴이 사용되는 곳 : Spring Bean, Thr..

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

https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 0️⃣ 문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보통 엘리베이터에는 어떤 층으로 이동할 수 있는 버튼..
5️⃣ 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 자원 : 클래스(객체) 많은 클래스가 하나 이상의 자원에 의존한다. (= 하나 이상의 클래스와 의존 관계(ex. has a, is a)를 맺고 있다) → 예를 들어 맞춤법 검사기(SpellChecker)는 사전(Lexicon)을 멤버 변수로 가지고 있다. (의존) piblic class SpellChecker { private static final Lexicon dictionary = ...; private SpellCheck() {} // 객체 생성 방지 // SpellCheck가 제공해주는 기능들 public static boolean isValid(String word) { ... }; public List suggestions(Stri..

📌 목차 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대 원칙 - 객체지향 프로그래밍의 근간을 이..

데브 코스 과정 중 자바에서 null을 처리하는 방법 중 하나인 Optional에 대한 강의를 듣고 있었다. 👩🏻🏫 다음 코드의 어떤 부분에서 NPE(null point exception)이 발생할까요? public static void main(String[] args) { String string = null; System.out.println("string = " + string); System.out.println(string.toUpperCase()); } 이 질문을 듣고, 'string.toUpperCase()에서는 당연히 NPE이 발생하고, 첫번째 print문에서도 아닌척 하지만 string.toString()이 자동으로 호출되서 NPE가 발생하겠군 후후'라고 생각했다..😇 그런데 에러는 ..