java14 [Java] Effective Java 3/E 3장 item 21~25 Item 21: 인터페이스는 구현하는 쪽을생각해 설계해라 디폴트 메소드를 통해 기존 인터페이스에 메소드를 추가할 수 있음 유용하다만 기존 구현체와 충돌하지 않는지에 대한 고려 필요함 Item 22: 인터페이스는 타입을 정의하는 용도로만 사용하라 상수 인터페이스는 안티 패턴임 상수 클래스는 인스턴스할 수 없는 유틸리티 클래스로 만들어 사용하자) public class Constants { private Constants(){} // 인스턴스화 방지 public static final int ONE = 1; } Item 23: 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 public class TagClass { enum Type { HOT, COLD } final Type type; String h.. TIL/Java 2024. 1. 20. [Java] Effective Java 3/E 4장 item 15~20 Item 15: 클래스와 멤버의 접근 권한을 최소화하라 public 으로 나오는 것은 유지 보수, 하위 버전 호환의 책임 존재 외부에서 접근할 수 있는 내용은 최소화하자 public 클래스의 인스턴스 필드는 되도록 public 아니어야 함 public 가변 변수를 가진다면 일반적으로 Thread-Safe 하지 않음 Item 16: public 클래스에서는 public 필드가 아닌 접근자 메소드 사용하라 public 필드 바로 접근 X getter 쓸 것 setter는 정말 필요시에 쓸 것 Item 17: 변경 가능성을 최소화하라 객체 상태 변경하는 메소드 제공X 클래스 확장할 수 없도록 모든 필드 final 으로 선언 모든 필드 private 으로 선언 자신 외에는 내부의 가변 컴포넌트에 접근 불가 불변.. TIL/Java 2024. 1. 18. [Java] Effective Java 3/E 3장 item 10~14 3장 모든 객체의 공통 메소드 item 10: equals는 일반 규약을 지켜 재정의하라 equals 메소드를 재정의하며서 발생할 수 있는 문제를 회피하는 방법은 재정의하지 않는 것 equlas 메소드를 재정의하지 않으면 오직 자기 자신과만 같게 된다. equals 메서드를 재정의하지 않는 것이 최선인 Case 각 인스턴스가 본질적으로 고유하다. 인스턴스의 논리적 동치성을 검사할 일이 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 클래스가 private이거나 package-private이고 equals 메소드를 호출할 일이 없다. equals 메소드를 재정의해야하는 Case 객체 식별성, 물리적으로 두 객체가 같냐? 가 아니라 논리적 동치성, 논리적으로 두 객체가 같냐? .. TIL/Java 2023. 11. 14. [JAVA] Java Version 8 vs 17 처음 자바를 접했을 때 영문도 모른채 조교의 안내대로 JAVA 버전 8을 설치하여 사용하다보니 자연스럽게 사용해왔던 8버전, 그리고 현재 스프링 부트 3.0을 사용하기 위해 버전 업그레이드를 따라가면서 사용하게 된 17버전에 대한 차이를 알아보며 내가 자연스럽게 사용하고 있는 기능에 대한 복습과 놓치고 있던 점에 대해 학습하고자 한다. 개요 JAVA 8 Lambda Stream interface default Method 인터페이스가 추상메소드말고 default 선언으로 메소드를 미리 선언할 수 있는 기능 ⇒ 추후에 overriding 가능 Optional LocalDateTime JAVA 17 Pattern Matching for Switch(17에서 등장) Sealed Classes (15에서 등장,.. TIL/Java 2023. 10. 21. [Java] Effective Java 3/E item 4~6 item4: 인스턴스화를 막으려거든 private 생성자를 사용해라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰는 설계X 하지만 생성자를 명시하지 않으면 자동 생성되기에, private 생성자를 만들어 인스턴스화를 막자 이러한 방법은 상속을 불가능하게 하는 효과도 존재 Plus) 추상 클래스로 만드는 것으로 인스턴스화를 막을 수 없음. 왜냐하면 하위 클래스를 만들어 인스턴스화할 수 있기 때문 + 상속하여 사용하라는 의도로 착각될 수 있음 item5: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 하나 이상의 자원에 의존하는 클래스를 만들 때, 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱클톤 방식이 적합하지 않음 인스턴스를 생성할 때 생성자에 필요한 자원을.. TIL/Java 2023. 5. 28. [Java] Effective Java 3/E item 1~3 Item1: 생성자 대신 정적 팩토리 메소드를 고려하라 클래스 인스턴스를 얻는 전통적인 수단는 public 생성자 이와 별도의 수단으로 클래스는 정적 팩토리 메소드를 제공할 수 있음 정적 팩토리 메소드가 public 생성자에 비해 가지는 장단점 장점 이름을 가질 수 있음 Ex) BigInteger(int, int, Random) vs BigInteger.probablePrime 호출될 때마다 인스턴스를 새로 생성하지 않아도 됨 생성 비용이 큰 객체가 자주 요청되는 상황이라면 성능적으로 좋음 반복되는 요청에 같은 객체를 반환하는 식의 정적 팩토리 방식의 클래스는 인스턴스 통제할 수 있음. 이를 통해 클래스를 싱글톤으로 만들 수도, 인스턴스화 불가로 만들 수도 있음 반환 타입의 하위 타입 객체를 반환할 수 .. TIL/Java 2023. 5. 26. [JAVA] TIL final 키워드 필드에서 사용하면 수정 불가능 메소드에 사용하면 오버라이딩 불가능 클래스에서 사용하면 상속 불가능 상속 관련 public class InheritTest { public static class Parent{} public static class Child extends Parent{} public static void main(String[] args) { Parent parent = new Child(); // 가능 Child child = new Parent(); // 컴파일 에러 } } Marker interface / tag interface 상수도 메소드도 없는 완전히 비어있는 인터페이스 = Marker interface / tag interface 특별한 행동을 컴파일이나 J.. TIL/TIL 2022. 9. 6. [JAVA] 오버로딩(overloading) vs 오버라이딩(overriding) 맨날 헷갈리는 오버로딩과 오버라이딩... 오버로딩(Overloading)은 한 클래스 내에서 각각 다른 파라미터를 가진 동명의 메소드를 정의 컴파일타임에 결정 오버라이딩(Overriding)은 상속된 클래스에서 부모 클래스에 존재하는 메소드를 재정의 런타임에 결정 오버로딩 //overloading public class Overload { public static void get(List list) { System.out.println("List"); } public static void get(ArrayList list) { System.out.println("ArrayList"); } public static void get(LinkedList list) { System.out.println("Lin.. TIL/TIL 2022. 9. 6. [백준] 외판원 순회 문제 (10971, 2098, 16991) 10971번: 외판원 순회 2 (acmicpc.net) 2098번: 외판원 순회 (acmicpc.net) 16991번: 외판원 순회 3 (acmicpc.net) 16991번: 외판원 순회 3 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 16) 다음 N개의 줄에는 도시의 좌표 x, y가 주어진다. 모든 좌표는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. 두 도시의 위치가 같은 경우 www.acmicpc.net 세 문제 다 같은 문제라고 해도 괜찮을 정도로 유사하다 그중 3번을 기준으로 풀이를 적도록 하겠다. 문제 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급.. TIL/SW&백준 문제 리뷰 2022. 8. 30. [백준]1208 부분수열의 합2 1208번: 부분수열의 합 2 (acmicpc.net) 1208번: 부분수열의 합 2 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100.. TIL/SW&백준 문제 리뷰 2022. 8. 22. [백준]1202 보석도둑 1202번: 보석 도둑 (acmicpc.net) 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 가방에는 최대 한 개의 보석만 넣을 수 있다. 상덕이가 훔칠 수 있는 보석의 최대 가격을 구하는 프로그램을 작성하시오. .. TIL/SW&백준 문제 리뷰 2022. 8. 21. [백준]1007 벡터 매칭 1007번: 벡터 매칭 (acmicpc.net) 1007번: 벡터 매칭 평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속 www.acmicpc.net 문제 평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속하는 모든 점은 한 번씩 쓰여야 한다. 벡터 매칭에 있는 벡터의 개수는 P에 있는 점의 절반이다. 평면 상의 점이 주어졌을 때, 집합 P의 벡터 매칭에 있는 벡터의 합의 길이의 최솟값을 출력하는 프로그.. TIL/SW&백준 문제 리뷰 2022. 8. 21. 이전 1 2 다음 반응형