📅 학습 기간: 2월 3주차
🎯 학습 내용: 제네릭 / 싱글톤 / 빌더 / 롬복
📌 1. 제네릭 (Generics)
💡 데이터 타입을 일반화하여 다양한 타입을 지원하는 기능
✅ 타입 안정성, 코드 재사용성, 가독성을 향상
🔹 1.1 제네릭 클래스
// 제네릭 클래스 정의
class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
// 제네릭 클래스 사용
Pair<Integer, String> pair = new Pair<>(123, "안녕하세요");
System.out.println(pair.getKey()); // 123
System.out.println(pair.getValue()); // 안녕하세요
✅ 제네릭 타입을 사용하여 다양한 데이터 타입을 처리 가능
🔹 1.2 제네릭 메서드
class Utils {
public static <T> void print(T value) {
System.out.println(value);
}
}
// 제네릭 메서드 사용
Utils.<String>print("안녕"); // 안녕
Utils.print(123); // 123 (타입 추론 가능)
✅ 제네릭 메서드는 호출 시 전달된 타입에 따라 유연하게 동작 가능
🔹 1.3 제네릭 와일드 카드
class Message<T> {
private T message;
public Message(T message) {
this.message = message;
}
public T getMessage() {
return message;
}
}
// 와일드카드 사용 예제
static void printMessage(Message<?> msg) {
System.out.println(msg.getMessage());
}
Message<String> msg1 = new Message<>("Hello");
printMessage(msg1);
✅ 와일드카드(?
)를 사용하면 불특정 타입을 허용 가능
📌 2. 싱글톤 (Singleton)
💡 클래스의 인스턴스를 단 하나만 생성하여 공유하는 패턴
✅ 자원의 중복 생성을 방지하고 메모리 사용 최적화
🔹 2.1 싱글톤 패턴 구현
class Singleton {
private static Singleton instance;
// private 생성자 - 외부에서 직접 객체 생성 불가
private Singleton() {}
// 싱글톤 객체 반환 메서드
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
✅ getInstance()
메서드를 통해 유일한 객체를 제공
📌 3. 빌더 패턴 (Builder Pattern)
💡 객체를 단계적으로 생성할 수 있도록 하는 패턴
✅ 생성자가 많아지는 경우 유용하며, 가독성과 유지보수성을 향상
🔹 3.1 빌더 패턴 구현
class GameCharacter {
private final String name;
private final String sort;
private final String skill;
private final String item;
public static class Builder {
private final String name;
private final String sort;
private String skill = "Basic Attack";
private String item = "None";
public Builder(String name, String sort) {
this.name = name;
this.sort = sort;
}
public Builder skill(String skill) {
this.skill = skill;
return this;
}
public Builder item(String item) {
this.item = item;
return this;
}
public GameCharacter build() {
return new GameCharacter(this);
}
}
private GameCharacter(Builder builder) {
this.name = builder.name;
this.sort = builder.sort;
this.skill = builder.skill;
this.item = builder.item;
}
}
// 빌더 패턴 사용
GameCharacter character = new GameCharacter.Builder("뽀로로", "펭귄")
.skill("크롱 놀리기")
.item("안경")
.build();
✅ 필수 필드는 생성자에서, 선택 필드는 메서드를 통해 설정 가능
📌 4. 롬복 (Lombok)
💡 자바 코드에서 반복되는 보일러플레이트 코드를 줄여주는 라이브러리
✅ 어노테이션을 사용하여 코드의 간결성을 증가
🔹 4.1 롬복 주요 어노테이션
어노테이션 | 설명 |
---|---|
@Getter / @Setter |
필드에 대한 getter/setter 자동 생성 |
@ToString |
객체를 문자열로 변환하는 toString() 자동 생성 |
@NoArgsConstructor |
기본 생성자 자동 생성 |
@AllArgsConstructor |
모든 필드를 포함한 생성자 자동 생성 |
@Builder |
빌더 패턴을 자동으로 구현 |
🔹 4.2 롬복 예제
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
class Person {
private String name;
private int age;
}
// 객체 생성 및 사용
Person person = Person.builder()
.name("홍길동")
.age(25)
.build();
System.out.println(person); // Person(name=홍길동, age=25)
✅ @Builder
어노테이션을 사용하면 빌더 패턴을 간단하게 구현 가능
🎯 소감
📌 생각해야하는 패턴들이 꽤나 많았던 파트 같아요!
📌 이번 파트에는 꽤 중요한 내용들이 많았기때문에 더 자주 포스팅을 참고할 것 같아요!
🚀 마무리
이번 학습을 통해 제네릭, 싱글톤, 빌더, 롬복의 개념을 확실히 정리할 수 있었다! 🎯
'IT > JAVA' 카테고리의 다른 글
[JAVA] 자바 기초 복습 (Chapter.14) part2 (0) | 2025.03.05 |
---|---|
[JAVA] 자바 기초 복습 (Chapter.14) prat1 (0) | 2025.03.05 |
[JAVA] 자바 기초 복습 (Chapter.12) (1) | 2025.03.04 |
[JAVA] 자바 기초 복습 (Chapter.11) (0) | 2025.03.03 |
[JAVA] 자바 기초 복습 (Chapter.10) (1) | 2025.03.02 |