꾸준한 스터디
article thumbnail
정적 유틸리티 클래스 (Static Utility Class)
Effective Java/키워드 2023. 1. 6. 00:32

static method와 static field 만을 담은 클래스. 보통 유틸성 클래스로 helper의 성격을 갖는 클래스. 이런 클래스들은 클래스 메서드와 클래스 인스턴스이니 객체 인스턴스가 필요없는 클래스여서 private로 생성자를 선언함으로 외부 클래스에서 인스턴스화를 못하게 막아준다. 종종 유틸리티 클래스에서 abstract 클래스로 만들고 기본 생성자 선언을 안한 클래스들이 보이는데 이는 직접적으로 해당 유틸리티 클래스를 인스턴스로 만들지는 못하지만 상속을 받은 하위 클래스에서는 인스턴스로 만들어져 인스턴스 메서드, 필드로 접근할 수 있게된다. 그러므로 기본생성자를 private로 생성하여 아얘 생성을 못하게 막아주는 것이 좋다. private 생성자를 선언했을 경우 외부 클래스에서 접근할 ..

article thumbnail
[Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라
Effective Java/정리 2023. 1. 6. 00:10

필수가 아닌 선택적인 매개변수가 많을때 정적 팩터리와 생성자로 대응하기 쉽지 않다는 점이다. 점층적 생성자 패턴 - 선택 값을 하나씩 추가하여 생성자를 점층적으로 만드는 패턴이다. 매개변수의 개수나 타입이 일치하지 않을 경우 컴파일 오류를 통해 누락된 값을 확인할 수 있는 안전성을 가지고 있다. 그러나, 적당한 개수의 매개변수에 대한 점층적 생성자 패턴은 괜찮아 보일지 몰라도 점점 많아지는 생성자로 클래스 코드의 추가 수정 삭제등 유지보수에 대한 불편함이 있다. 또한 각 생성자의 의미, 어떠한 매개변수가 들어가야 하는지에 대한 가독성이 떨어진다.. public class Jwt { private static final String SECRET_KEY = "1234"; // JWT Secret Key pr..

직렬화 역직렬화 (Siriallizable Desirializable)
Effective Java/키워드 2023. 1. 4. 18:23

직렬화 데이터 직렬화란 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것. 직렬화를 하는 이유는 사용하고 있는 데이터를 파일 저장 혹은 데이터 통신에서 파싱할 수 있는 유의미한 데이터를 만들기 위함 자바 직렬화는 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술. JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술. 역직렬화 데이터 역 직렬화란 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것. 바이트로 변환된 데이터를 다시 객체로 변환하는 기술. 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로..

공변 반환 타입 (Covariant Return Type)
Effective Java/키워드 2023. 1. 4. 18:22

부모클래스 메서드를 자식클래스에서 오버라이딩 시 메서드 시그니쳐에 이름, 매개변수, 반환타입이 같아야 하는데 java 1.5부터 is-a 관계인 경우 메서드 반환타입이 부모클래스의 자식클래스로 변경할 수 있다. public class Test { public static void main(String[] args) { Animal animal = new Animal(); Dog dog = new Dog(); // Dog is a Animal 묵시적 형변환 Animal aniDog = new Dog(); System.out.println(animal.create().getClass()); // Animal System.out.println(dog.create().getClass()); // Dog Syst..

열거 타입 (Enum)
Effective Java/키워드 2023. 1. 4. 18:15

변하지 않는 상수의 집합 클래스 보통 성별이나, 월, 요일 같은 경우 변하지 않는 데이터들을 전역변수 처럼 1개의 인스턴스로 사용하기도 하는데 public class Month { public static final String MAY = "5월"; } public class App { public static void main(String[] args){ System.out.println(Month.MAY); } } 클래스 변수로 선언을 하면 외부 패키지에서도 전역변수처럼 사용했지만 enum 클래스로 더 편리하게 관리할 수 있다. enum 클래스는 메모리 메소드 영역에 올라가면 클래스로더가 클래스를 파싱하면서 각 상수가 싱글톤으로 힙 영역에 생성 된다. public enum Month{ // 각 상수는..

싱글턴 (Singleton)
Effective Java/키워드 2023. 1. 4. 18:14

오직 하나의 객체만을 생성할 수 있는 클래스. 객체의 유일성 보장한다. 어플리케이션이 시작될 때 최초 한 번만 메모리를 할당하고 그 메모리에 캐시된 인스턴스를 만들어 사용한다. 싱글톤은 생성 패턴(Creational Pattern) 중 하나이다. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴입니다. 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다. 생성 패턴은 시스템이 상속(inheritance) 보다 복합(composite) 방법을 사용하는 방향으로 진화되어 가면서 더 중요해지고 있습니다. 생성 패턴에서는 중요한 이슈가 두 가지 있습니다. 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화합니다. 생성 패턴..

article thumbnail
불변 클래스 (Immutable Class)
Effective Java/키워드 2023. 1. 4. 18:13

불변은 변하지 않는 뜻을 가지고 있다. Immutable Class는 객체를 만들게 되면 상태값을 변경할 수 없는 클래스이다. 클래스 시그너쳐에 final 키워드를 사용하여 다른 클래스에서 상속받지 못하게 하여 하위 클래스에서 메서드 오버라이딩이 안되게 막고 필드도 final 키워드로 선언하여 객체 생성하여 인스턴스화 -> 초기값 세팅이 되면 더 이상 수정할 수 없게된다. String 클래스 역시 불변 객체로 한 번 할당된 문자열은 변경할 수 없다. 하지만 같은 문자열을 literal 형식으로 생성하면 String Constant Pool(Fly Weight Pool)에 담겨 같은 곳을 참조해 메모리 낭비를 줄이는 방식을 사용한다. public class StringTest { public static ..

article thumbnail
정적 팩터리 메서드 (Static Factory Method)
Effective Java/키워드 2023. 1. 4. 18:12

팩터리란? 객체를 생성(인스턴스 반환) 하는 공장. 호출할 때마다 특정 타입의 인스턴스를 반복해서 만들어주는 객체를 말한다. 정적 팩터리 메서드는 생성자를 통한 객체 생성 대신 클래스 메서드(static 키워드가 붙은 메서드)를 통해 객체를 생성하는 것.