[Android] 팩토리 패턴 (Factory Pattern)

민채·2024년 2월 26일
0

Android

목록 보기
11/16

팩토리 패턴 (Factory Pattern)

  • 객체를 생성하기 위해 인터페이스를 만든 후, 인터페이스를 구현하는 클래스에서 어떤 객체를 만들지 결정하는 패턴
  • 객체를 사용하는 코드에서 생성 부분을 떼어내 추상화한 패턴
  • 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고,
    하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

장점

  • 객체 생성 로직이 분리되어 확장성 및 유지보수성을 증가시킴
  • 구체적인 구현클래스에 의존하지 않고 인터페이스에 의존할 수 있도록해 유연성과 확장성을 증가시키고 결합도를 낮춤
  • 클라이언트는 단순히 팩토리에게 객체 생성을 요청하면 되므로 객체 생성에 대한 세부 사항을 알 필요가 없음

사용법

  • 추상화된 인터페이스를 정의하고, 이를 구현하는 여러개의 팩토리 클래스를 만들어 사용
  • 클라이언트는 팩토리 인터페이스를 통해 객체를 생성하고 반환받을 수 있음
  • 팩토리 클래스는 객체 생성에 대한 로직을 구현하고, 실제 객체의 인스턴스를 생성하여 반환

예제 코드

인터페이스 정의

interface Shape {
    fun draw()
}

해당 인터페이스를 구현한 클래스를 만듦

class Rectangle : Shape {
    override fun draw() {
        println("Drawing a Rectangle")
    }
}

class Circle : Shape {
    override fun draw() {
        println("Drawing a Circle")
    }
}

팩토리 인터페이스 정의

interface ShapeFactory {
    fun createShape(): Shape
}

팩토리 인터페이스를 구현한 클래스를 만듦 - 객체 생성에 대한 로직 구현

class RectangleFactory : ShapeFactory {
    override fun createShape(): Shape {
        return Rectangle()
    }
}

// 원을 생성하는 팩토리
class CircleFactory : ShapeFactory {
    override fun createShape(): Shape {
        return Circle()
    }
}

사용

fun main() {
    val rectangleFactory: ShapeFactory = RectangleFactory()
    val rectangle: Shape = rectangleFactory.createShape()
    rectangle.draw() // Output: Drawing a Rectangle

    val circleFactory: ShapeFactory = CircleFactory()
    val circle: Shape = circleFactory.createShape()
    circle.draw() // Output: Drawing a Circle
}

그리고 여기에 너무 잘 정리되어 있어서..ㅎㅎ 이걸 참고하면 될 것 같다!

https://yoonda.tistory.com/35

참조

profile
코딩계의 떠오르는 태양☀️

0개의 댓글