정적 팩토리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 🔎 정적 팩토리 메서드? (static factory method) 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이지만, 그 외에도 생성자와 별도로 정적 팩토리 메서드를 제공할 수 있다. 즉, 정적 팩토리 메서드란 public 생성자와 별도로 해당 클래스의 instance를 반환하는 정적 메서드이다. 이 방식에는 장점과 단점이 모두 존재한다. 👍 정적 팩토리 메서드의 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 쉽게 알 수 없다. 메서드에 이름을 부여함으로써 반환될 객체의 특성을 쉽게 묘사할 수 있다. 한 클..
네이티브 메서드가 성능을 개선해주는 일은 많지 않다. 🔎 자바 네이티브 인터페이스 (Java Native Interface, JNI) 네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다. JNI는 이렇게 Java 이외의 언어로 만들어진 네이티브 메서드를 Java와 상호작용할 수 있도록 연결해주는 인터페이스를 말한다. 즉, 자바 프로그램에서 네이티브 메서드(다른 언어로 작성된 메서드)를 호출하는 기술을 JNI라고 한다. ✔ 네이티브 메서드의 주요 쓰임 1. 레지스트리 같은 플랫폼 특화 기능을 사용한다. 2. 네이티브 코드로 작성된 기존 라이브러리를 사용한다. 3. 성능개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다. 4. 대체할 만한 자바..
리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 따라서 인스턴스 생성에만 쓰고, 이렇게 만든 인스턴스는 인터페이스나 상위 클래스로 참조해 사용하자. 🔎 리플렉션? 리플렉션이란, 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API이다. 즉, 구체적인 클래스 타입을 모를때 사용하는 방법을 리플렉션이라고 한다. 그런데, 내가 짠 코든데 내가 만든 클래스의 이름을 모르는 게 말이 되는 일인가? 의문이 들 수 있다. 하지만 가끔 어떤 타입의 클래스나 변수, 혹은 메소드를 사용해야 할지 모르는 경우가 생긴다. 예를 들어 변수의 값을 조건에 따라서 다르게 사용해야하는 경우라던가, 애플리케이션이 실행되고 나서 생성되는 클래스..
주어진 객체를 표현할 적절한 인터페이스가 있는지 찾아서 그 인터페이스로 참조하면 더 유연하고 세련된 프로그램을 만들 수 있다. 🔎 인터페이스 타입 선언 vs 클래스 타입 선언 앞서, 아이템 51에서 매개변수의 타입으로는 클래스보다 인터페이스가 더 낫다고 했다. 매개변수로 적합한 인터페이스가 있다면 이를 구현한 클래스가 아닌 그 인터페이스를 직접 사용한다. 여기서 더하여, 적합한 인터페이스만 있다면 매개변수뿐만 아니라 반환 값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 예를 들어, LinkedHashSet을 선언하는 두 가지 방법이 있다. /* 좋은 예 : 인터페이스를 타입으로 사용 */ Set sonSet = n..
- Total
- Today
- Yesterday
- springboot
- 정처기
- IMAGE
- 조합
- BFS
- 아이템61
- BOJ
- subset
- 알고리즘
- Java
- 순열
- 토큰기반인증
- bruteforce
- dfs
- 이펙티브자바
- 완전탐색
- 그래프탐색
- docker
- 부분집합
- Container
- 완탐
- 아이템59
- dp
- 백준
- OS
- Retrofit2
- 운영체제
- docker-compose
- 아이템60
- EffectiveJava
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |