

팩토리 패턴에 대해서
팩토리 패턴은 객체 생성 로직을 캡슐화하여 객체 생성을 담당하는 클래스(팩토리)를 통해 객체를 생성하는 디자인 패턴입니다. 이렇게 하면 객체를 생성하는 코드와 사용하는 코드를 분리할 수 있습니다.
아래에 팩토리 패턴을 구현한 간단한 자바 코드를 보여드리겠습니다.
java
interface Animal {
void speak();
}
class Dog implements Animal {
public void speak() {
System.out.println("멍멍!");
}
}
class Cat implements Animal {
public void speak() {
System.out.println("야옹~");
}
}
class AnimalFactory {
public Animal createAnimal(String type) {
if (type.equals("Dog")) {
return new Dog();
} else if (type.equals("Cat")) {
return new Cat();
}
return null;
}
}
위 코드에서 AnimalFactory는 팩토리 클래스로, createAnimal 메서드를 통해 동물 타입의 문자열을 입력받아 해당하는 동물 객체를 생성합니다. 즉, 객체 생성 로직을 캡슐화하고 있습니다.
이 팩토리 패턴을 사용하는 코드는 다음과 같습니다.
java
public class Main {
public static void main(String[] args) {
AnimalFactory animalFactory = new AnimalFactory();
Animal dog = animalFactory.createAnimal("Dog");
dog.speak(); // 출력: 멍멍!
Animal cat = animalFactory.createAnimal("Cat");
cat.speak(); // 출력: 야옹~
}
}
위 Main 클래스에서는 AnimalFactory의 인스턴스를 생성하고, createAnimal 메서드를 통해 동작
1. AnimalFactory 생성 -> AnimalFactory animalFactory = new AnimalFactory();
2. "Dog" 입력 -> Animal dog = animalFactory.createAnimal("Dog");
- "Dog"에 해당하는 Dog 객체 생성
3. dog.speak() 호출 -> 출력: 멍멍!
4. "Cat" 입력 -> Animal cat = animalFactory.createAnimal("Cat");
- "Cat"에 해당하는 Cat 객체 생성
5. cat.speak() 호출 -> 출력: 야옹~
Sandwich sandwich = new Sandwich.Builder() 빌더 패턴에 대해서
1. Sandwich.Builder 인스턴스 생성 -> new Sandwich.Builder()
2. Sandwich 객체 생성 -> .build()
3. 생성한 Sandwich 객체를 sandwich 변수에 할당 -> Sandwich sandwich = ...
인스턴스 생성하고
Sandwich 객체 생성을 하고 그것을 .build() 한다\
3
new 키워드 에 대해서 정확히 파악해 보자
new 키워드는 자바에서 새로운 객체를 생성할 때 사용합니다. new 다음에 오는 클래스 이름(Sandwich 등)은 생성할 객체의 타입을 나타냅니다. 따라서 new Sandwich()는 Sandwich 타입의 새로운 객체를 생성하라는 의미입니다.
그런데 여기서 Sandwich 객체를 직접 생성하는 대신 Sandwich.Builder를 사용하여 객체를 생성합니다.
이는 빌더 패턴(Builder Pattern)이라는 디자인 패턴의 일종으로,
복잡한 객체를 생성하는 과정을 단순화하고 코드의 가독성을 높이는 데 도움이 됩니다.
Sandwich.Builder 인스턴스 생성 과정은 다음과 같습니다:
Java
Sandwich.Builder builder = new Sandwich.Builder();
위 코드에서 new Sandwich.Builder()는 Sandwich.Builder 타입의 새로운 객체를 생성하라는 의미입니다.
이렇게 생성된 Builder 객체는 Sandwich 객체를 생성하기 위한 설정값들을 저장하고 있습니다.
그리고 Sandwich 객체를 생성하는 과정은 다음과 같습니다:
Java
Sandwich sandwich = builder.build();
위 코드에서 builder.build()는 Builder 객체에 저장된 설정값들을 바탕으로 Sandwich 객체를 생성하라는 의미입니다.
이렇게 생성된 Sandwich 객체는 sandwich 변수에 할당됩니다.
따라서 Sandwich와 new Sandwich 사이의 관계는, Sandwich는 객체를 생성할 클래스의 타입을 나타내고,
new Sandwich는 해당 타입의 새로운 객체를 생성하라는 의미입니다.
그러나 이 경우에는 Sandwich.Builder를 통해 Sandwich 객체를 생성하므로,
new Sandwich는 직접적으로 사용되지 않습니다.
자바에서 말하는 '인스턴스'란 무엇인가?
자바에서 '인스턴스'는 클래스를 기반으로 생성된 객체를 의미합니다. 즉, 클래스는 객체를 생성하기 위한 틀이며, 이 틀을 사용해 만들어진 실체가 바로 '인스턴스'입니다. 각 인스턴스는 클래스에서 정의된 필드(속성)와 메서드(동작)를 가지게 됩니다.
아래에 '인스턴스'를 생성하고 사용하는 간단한 자바 코드를 보여드리겠습니다.
java
public class Dog {
// 필드
private String name;
// 생성자
public Dog(String name) {
this.name = name;
}
// 메소드
public void bark() {
System.out.println(name + "가 멍멍하고 짖습니다.");
}
}
public class Main {
public static void main(String[] args) {
// Dog 클래스의 인스턴스 생성
Dog myDog = new Dog("포키");
// 인스턴스의 메소드 사용
myDog.bark();
}
}
위 코드에서 Dog 클래스는 강아지를 표현하는 틀입니다. new Dog("포키") 코드를 통해 Dog 클래스의 인스턴스를 생성하고, 이를 myDog라는 변수에 할당합니다. 이때 생성된 myDog 객체가 바로 '인스턴스'입니다.
myDog.bark() 코드는 myDog 인스턴스의 bark 메서드를 호출합니다. 이렇게 인스턴스를 통해 클래스에서 정의된 메소드를 사용할 수 있습니다.
1. Dog 클래스의 인스턴스 생성 -> new Dog("포키")
2. 생성한 인스턴스를 myDog 변수에 할당 -> Dog myDog = ...
3. myDog 인스턴스의 bark 메소드 호출 -> myDog.bark()
이렇게 인스턴스를 생성하고 사용하면, 클래스에서 정의된 필드와 메소드를 실제로 사용할 수 있게 됩니다. 이는 객체 지향 프로그래밍의 핵심 원리 중 하나입니다.

'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
스프링 입문을 위한 자바 객체 지향의 원리와 이해 (7)[책리뷰 & Book review] (0) | 2024.02.11 |
---|---|
Do it! 알고리즘 입문: 자바 편 (28)[책리뷰 & Book review] (1) | 2024.02.06 |
Do it! 알고리즘 입문: 자바 편 (26)[책리뷰 & Book review] (0) | 2024.02.06 |
Do it! 알고리즘 입문: 자바 편 (25)[책리뷰 & Book review] (0) | 2024.02.05 |
댓글