JAVA(247)
-
[Java][Effective Java] item 3, private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴(Singleton)이란 무엇인가? 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 의미합니다. 싱글톤의 예시로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있습니다. 싱글턴 생성 첫번째 방식 : 필드 멤버에 public static final을 적용한 인스턴스를 클래스 초기화시 생성 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){} public void leaveTheBuilding() { System.out.println("call leaveTheBuilding"); } } 위와 같이 Elvis 타입의 INSTANCE 인스턴스는..
2022.05.15 -
[Java][Effective Java] item 2, 생성자에 매개변수가 많다면 빌더를 고려하라
정적 팩토리와 생성자가 가지고 있는 제약 선택적인 매개변수가 많을 때 적절히 대응하기가 어려움 예를 들어 식품 포장의 영양정보가 20개정도가 된다면 필수적인 정보 몇개를 제외하고는 대부분의 정보들은 0 값을 가지고 있는 경우가 많음 이러한 제약을 해결하기 위해서 점층적 생성자 패턴을 사용할 수도 있지만 매개변수가 많아질수록 코드를 작성하기 어렵거나 읽기 어려워지는 단점을 가지고 있습니다. 점층적 생성자 패턴(telescoping constructor pattern) 점층적 생성자 패턴은 필수 매개변수가 들어있는 생성자에서부터 출발하여 선택 매개변수를 늘려나가면서 생성자들을 오버로딩 방식으로 늘려가는 방식입니다. public class NutritionFacts { private int servingSiz..
2022.05.13 -
[Java][Effective Java] item 1, 생성자 대신 정적 팩토리 메서드를 고려하라
클라이언트가 클래스의 인스턴스를 얻는 수단 1. public 생성자를 이용하는 방법 2. 정적 팩토리 메서드(static factory method)를 이용하는 방법 인스턴스 생성시 생성자와 정적 팩토리 메서드의 호출 /** * 다음 코드는 일반적인 생성자로 생성한 객체이다. * 일반적으로 생성자로 생성한 car1, car2 객체는 * 생성자의 인자(parameter)만으로 SM3인지 K5인지 * 알 수 없다. */ Car car1 = new Car(1800); Car car2 = new Car(3500); /** * 다음 정적 팩토리 메서드를 활용하여 생성한 객체이다. * 인자에 가격을 입력할 필요없이 필요한 객체를 생성하기 * 위한 메서드를 호출하면 된다. * 다음과 같은 정적 팩토리 메서드를 통하여..
2022.05.12 -
[Java] 생성자와 정적 팩토리 메서드 비교
인스턴스의 생성과 생성자의 관계 일반적으로 new 키워드를 사용하여 인스턴스를 생성하면 생성자가 수행됩니다. 주목할점은 생성자는 인스턴스를 생성하는 것이 아니라 인스턴스의 필드 멤버를 초기화하는 목적으로 수행된다는 점입니다. 정리하면 생성자는 인스턴스를 생성하는 함수가 아니라 필드 멤버를 초기화해주는 것입니다. 생성자 기본 규칙 1. 생성자의 이름은 클래스의 이름과 동일해야 합니다. 2. 생성자는 리턴 타입이 없습니다. 만약 생성자에 리턴 타입을 정의한다면 컴파일러는 생성자가 아닌 일반적인 메서드로 간주할 것입니다. 3. 생성자에 적용할 수 있는 제어자는 접근제어자로써 public, protected, default, private가 존재합니다. 기본 생성자(Default Constructor) 1. 컴..
2022.05.11 -
[Java] 7. 객체지향 프로그래밍 2 #7 인터페이스(interface)
1. 인터페이스란 무엇인가? 인터페이스도 추상 클래스와 마찬가지로 일종의 추상 클래스입니다. 다만 추상 클래스와는 다른점은 일반 메서드 또는 멤버 변수를 구성원으로 가질 수 없습니다. 오직 추상 메서드와 상수만을 멤버로 가질 수 있습니다. 2. 인터페이스의 작성 interface 인터페이스이름{ public static final 타입 상수이름 = 값; public abstract 리턴타입 메서드이름(매개변수 목록); } 인터페이스 멤버들의 제약 모든 멤버 변수는 public static final이어야 하며, 이를 생략할 수 있음 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있음. 단, static 메서드와 디폴트 메서드는 예외(JDK 1.8~) interface Playin..
2022.05.11 -
[Java] 7. 객체지향 프로그래밍 2 #6 추상클래스(abstract class)
1. 추상 클래스란 무엇인가? 추상 클래스는 추상 메서드가 포함된 클래스 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있음 추상 클래스를 상속받는 자손 클래스들이 추상 메서드드를 오버라이딩하여 재정의함 예를 들어 TV 클래스가 존재한다면 TV 클래스를 상속받는 LgTV 클래스와 SamsungTV 클래스는 어느정도의 기능(ON/OFF, 채널 변경, 소리 변경 등)이 동일함을 알 수 있습니다. 하지만 제조사마다 내부 로직은 다르므로 추상 클래스를 정의함으로써 제조사마다 다르게 정의할 수 있도록 합니다. 추상 클래스의 선언 방법 abstract class 클래스이름{ ... } 2. 추상 메서드(abstract method) 추상 메서드는 추상 클래스의 메서드에 abstract 키워드..
2022.05.08