클래스와 객체 설계 패턴

클래스와 객체 설계 패턴

객체지향 프로그래밍(OOP)에서 클래스와 객체는 기본 구성 요소이며, 설계 패턴은 이러한 요소들을 효과적으로 구성하는 검증된 방법입니다.

 

클래스와 객체의 기본 개념

클래스는 객체를 생성하기 위한 청사진 또는 템플릿입니다. 클래스는 데이터(멤버 변수)와 동작(메서드)을 정의하며, 이를 통해 객체가 생성됩니다.

예를 들어, Car 클래스는 여러 자동차 객체(polo, mini, beetle 등)의 템플릿이 될 수 있습니다.

객체는 클래스의 인스턴스로, 클래스에서 정의한 데이터와 메서드를 포함합니다.

예를 들어, “Samsung Galaxy”는 브랜드명, RAM 용량 등의 속성과 통화, 문자 보내기 등의 동작을 가진 객체입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Car {
    // 속성(데이터)
    private String model;
    private String color;
    private int speed;
    // 메서드(동작)
    public void accelerate() {
        speed += 10;
    }
}
// 객체 생성
Car myCar = new Car();
cs

 

주요 설계 패턴

설계 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴으로 분류됩니다.

생성 패턴

패턴 설명
팩토리(Factory) 상위 클래스에서 객체 생성 인터페이스를 제공하고 하위 클래스가 생성할 객체 유형을 변경할 수 있게 함
빌더(Builder) 복잡한 객체의 생성과 표현을 분리하여 동일한 생성 과정으로 다양한 표현을 만들 수 있게 함
싱글톤(Singleton) 클래스의 인스턴스가 하나만 생성되도록 보장하고 전역 접근점 제공
프로토타입(Prototype) 기존 객체를 복제하여 새 객체 생성

구조 패턴

패턴 설명
데코레이터(Decorator) 객체에 동적으로 새로운 책임을 추가할 수 있게 함
퍼사드(Facade) 복잡한 시스템에 대한 단순화된 인터페이스 제공
프록시(Proxy) 다른 객체에 대한 대리자 역할을 하며 접근 제어

행동 패턴

패턴 설명
옵저버(Observer) 객체 상태 변경 시 의존 객체들에게 통지하는 메커니즘
전략(Strategy) 알고리즘을 캡슐화하고 교체 가능하게 함
템플릿 메서드(Template Method) 알고리즘의 구조를 정의하고 일부 단계를 하위 클래스에 위임

설계 패턴 예제

빌더 패턴 예제

이 패턴은 복잡한 객체 생성을 단계별로 수행하며, 특히 선택적 매개변수가 많은 경우에 유용합니다.

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
31
32
33
34
35
public class Car {
    private String engine;
    private int wheels;
    private Car(CarBuilder builder) {
        this.engine = builder.engine;
        this.wheels = builder.wheels;
    }
    public static class CarBuilder {
        private String engine;
        private int wheels;
        public CarBuilder setEngine(String engine) {
            this.engine = engine;
            return this;
        }
        public CarBuilder setWheels(int wheels) {
            this.wheels = wheels;
            return this;
        }
        public Car build() {
            return new Car(this);
        }
    }
}
// 사용 예
Car car = new Car.CarBuilder()
    .setEngine(“V8”)
    .setWheels(4)
    .build();
cs

 

팩토리 패턴 예제

이 패턴은 객체 생성 로직을 애플리케이션의 나머지 부분과 분리할 때 유용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public interface Shape {
    void draw();
}
public class Circle implements Shape {
    public void draw() {
        System.out.println(“Drawing Circle”);
    }
}
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType.equalsIgnoreCase(“CIRCLE”)) {
            return new Circle();
        }
        return null;
    }
}
// 사용 예
ShapeFactory shapeFactory = new ShapeFactory();
Shape shape = shapeFactory.getShape(“CIRCLE”);
shape.draw(); // Output: Drawing Circle
cs

 

타입 객체 패턴

타입 객체 패턴은 객체의 ‘타입’을 나타내는 필드를 가진 클래스를 생성하여 유연하고 재사용 가능한 객체를 만들 수 있게 합니다.

이 패턴은 Java 타입이 미리 정의되지 않았거나 수정/추가가 필요한 시나리오에 유용합니다.

이러한 클래스와 객체 설계 패턴을 이해하고 적용함으로써 더 유지보수 가능하고, 확장 가능하며, 효율적인 코드를 작성할 수 있습니다.

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다