본문 바로가기
Spring/토비의 스프링 3.0

1장. 오브젝트와 의존관계 (1)

by 밝지 2023. 4. 10.
728x90
반응형

 

스프링이 가장 관심을 많이 두는 대상은 오브젝트다. 스프링을 이해하려면 먼저 오브젝트에 깊은 관심을 가져야 한다.

애플리케이션에서 오브젝트가 생성되고 다른 오브젝트와 관계를 맺고, 사용되고, 소멸하기까지의 전 과정을 진지하게 생각해볼 필요가 있다. 더 나아가서 오브젝트는 어떻게 설계돼야 하는지, 어던 단위로 만들어지며 어떤 과정을 통해 자신의 존재를 드러내고 등장해야 하는지에 대해서도 살펴봐야 한다.

 

개발자가 객체를 설계할 때 가장 염두에 둬야 할 사항은 바로 미래의 변화에 어떻게 대비할 것인가이다. 

  • 분리와 확장을 고려한 설계 - 변경이 일어날 때 필요한 작업을 최소화하고 그 변경이 다른 곳에 문제를 일으키지 않게 하는 방법
  • 관심사의 분리 - 관심을 한 군데에 집중한다. 관심이 같은 것끼리 모으고, 다른 것은 따로 떨어져있게 한다. (변화는 한 번에 한 가지 관심에 집중하여 일어난다.) 관심이 같은 것끼리 하나의 객체 안으로 똔느 친한 객체로 모이게 하고, 관심이 다른 것은 간으한 따로 떨어져 서로 영향을 주지 않도록 분리한다. 

 

템플릿 메소드 패턴

슈퍼 클래스에 기본적인 로직의 흐름(예: 커넥션 가져오기, SQL 생성, 실행, 반환)을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩 가능한 protected 메소드 등으로 만든 뒤 서브 클래스에서 필요에 맞게 구현하여 사용하도록 하는 방법이다. 변하지 않는 긴으은 슈퍼 클래스에 만들어두고 자주 변경되며 확장할 기능은 서브 클래스에서 만들도록 한다. 슈퍼 클래스에서는 추상 메소드 또는 오버라이드 가능한 메소드를 정의해두고 이를 활용해 코드의 기본 알고리즘을 담고 잇는 템플릿 메소드를 만든다. 슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브 클래스에서 선택적으로 오버라이드 할 수 있도록 만든 메소드를 훅 메소드라고 한다. 서브 클래스에서는 추상메소드를 구현하거나 훅 메소드를 오버라이드 하는 방법으로 기능의 일부를 확장한다.

 

팩토리 메소드 패턴

상속을 통해 기능을 확장하는 패턴이다. 슈퍼 클래스 코드에서는 서브 클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다. 주로 인터페이스 타입으로 오브젝트를 리턴하므로 슈퍼클래스에서는 서브클래스에서 정확히 어떤 클래스의 오브젝트를 만들어 리턴할지는 알지 못한다. 사실 관심도 없다. 서브 클래스는 다양한 방법으로 오브젝트를 생성하는 메소드를 재정의할수 있다. 이렇게 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고, 이 방식을 통해 오브젝트 생성 방법을 슈퍼 클래스의 기본 코드에서 독립시키는 것을 팩토리 메소드 패턴이라고 한다. <- 무슨 말이야?;;

 

템플릿 메소드 패턴과 팩토리 메소드 패턴의 한계

상속을 사용했다는 단점이 있다. 상속은 많은 한계점이 있다. 자바는 클래스의 다중 상속을 허용하지 않기 때문이다. 단지 분리하기 위해 상속 구조로 만들어져버리면, 후에 다른 목적으로 상속을 적용하기 힘들다. 또 다른 문제는 상속의 경우 상하위 클래스의 관계가 밀접하다는 것이다. 상속의 경우 서브 클래스는 슈퍼 클래스의 기능을 직접 사용할 수 있다. 때문에 슈퍼 클래스 내부의 변경이 있으면 모든 서브 클래스를 함께 수정하거나 다시 개발해야 할 수도 있다. 

 

 

 

 

728x90
반응형

'Spring > 토비의 스프링 3.0' 카테고리의 다른 글

제어의 역전(IoC) from 토비의 스프링 3.0  (0) 2023.04.17