본문 바로가기

디자인 패턴

[디자인 패턴] 디자인 패턴의 소개와 객체 지향 특성

728x90
반응형

 앞으로 해당 카테고리에서 객체 지향의 디자인 패턴에 대해 익힌 내용을 정리해보려고한다. 본격적인 디자인 패턴을 알아가기 전에 디자인 패턴이란 것이 무엇이며 왜 사용해야 하는지 알아보고, 객체 지향을 위해 어떤 사상으로 설계해야 하는지에 대한 이론적인 내용을 이해하고자 해당 글을 작성한다.

 



1. 디자인 패턴, 그게 뭘까? 왜 알아야 할까? 꼭 필요할까?

디자인 패턴은 객체 지향 프로그래밍이 지향하는 설계 방식을 담고 있는 일종의 패턴 모음이다.
객체 지향 언어(Java, C++와 같은)는 Class, 상속, 다형성, 인터페이스 등의 객체 지향의 특성을 갖고 있다. 이 특성을 잘 활용하고 객체 지향 언어의 사상에 맞는 설계를 위해 디자인 패턴을 알아야 한다.

 

결국은 '좋은 설계를 만들기 위해' 디자인 패턴이 나왔다.
좋은 설계가 뭘까? 유지보수가 쉬운 설계이다. 유지보수가 쉽다는 것은 연관되지 않은 코드들이 서로 종속되어있지 않고 확장이 유연한 설계이다. S/W 개발은 모든게 비용이다. 유지보수가 쉽다는 것은 그만큼 인적, 물질적 자원이 적게 들고 비용을 절약할 수 있는 것이라고 말할 수 있다.

 

하지만 디자인 패턴을 꼭 지킬 필요는 없다.

규칙이 아니고 일종의 패턴일 뿐이다. 디자인 패턴을 모른다고 객체 지향 언어로 개발을 못하는건 아니니 프로젝트의 상황과 구조를 잘 파악하여 적절히 사용하는 것을 목표로 하자.

 

728x90

2. 객체지향의 4대 특성

그래 객체지향으로 설계/개발 해야한다는건 알겠어! 그럼 대체 객체지향은 어떤 특성을 갖고 있을까? 다소 이론적으로 들릴 수 있지만 일단 이런 특성이 있다 정도 훑어 보고 추후 디자인 패턴을 공부할 때 잘 이해해보자.

 

1) 추상화

  • 어떤 영역에서 필요로 하는 속성, 기능을 추출하는 작업 (class 만들기)
    -> 데이터 구조, 표현 방법, 처리하는 과정에 대한 추상화

2) 캡슐화

  • 데이터를 감싸서 외부에서 사용 가능한 부분만 제공하는 것 (private 예약어 사용, 정보의 은닉)
  • client 단에서 server 단의 세부 코드를 알 필요가 없다.
    내 객체를 외부로부터 보호하는게 목적이며 API로 통신하는 것 또한 캡슐화이다.

3) 상속성

  • 상위 개념의 특징을 하위 개념이 물려 받는 것
  • 일반적인 개념 -> 구체적인 개념 으로 객체의 관계를 표현
  • 기본 사상은 이어받되 특징을 확장하거나 구체화시킬 때 사용

4) 다형성

  • 상위 클래스의 추상 메서드를 하위 클래스에서 오버라이딩하여 사용하는 것
  • 이럴 경우 상위 클래스의 접근을 통해 하위 클래스 사용이 가능하게 된다.
    상위 클래스의 메서드를 호출하여 하위 클래스의 다른 표현과 결과를 나타낼 수 있다.
반응형

3. 객체 지향 설계에서의 차이

  • abstract class : new 불가능
    concrete class : new 인스턴스 생성 가능
  • 상속 : class 간 결합도 Up. 고민 많이 해야하는 부분. 1개 Type 핸들링 가능.
    합성 : 필요 코드 안에서 다른 것을 가져다 쓰는 것. 재사용 측면의 개념.

 

4. 응집도와 결합도

  • 응집도 : 모듈(객체) 내부의 기능의 집중 정도 (다른 부가적인 기능은 X)
  • 결합도 : 모듈(객체) 간의 상호 의존도
  • Best는 응집도가 높고, 결합도가 낮아야 함

 

5. SOLID 원칙

1) 단일 책임 원칙

  • 한 클래스는 하나의 기능만 구현해야 한다. (변경 이유는 단 하나!)

2) 개방 폐쇄의 원칙

  • 자신의 수정은 유연하지만, 다른 클래스가 수정될 때는 영향이 없어야 한다.
  • 인터페이스나 추상 클래스를 통해 접근해야 한다. (결합도 Down)
  • JDBC, I/O Stream

3) 리스코프 치환 원칙

  • 하위 클래스는 상위 클래스로 교체될 수 있어야 한다. (is-a 관계)
  • 즉 상위의 기능은 하위에서 모두 사용이 가능해야 한다.

4) 의존 역전 원칙

  • 구체적인 것(변하기 쉬운 것. 구현되있는 것. 하위클래스)보다 추상적인 것(인터페이스, 추상클래스, 상위클래스)에 의존한다.

5) 인터페이스 분리 법칙

  • 하나의 객체가 여러 기능을 제공해야 한다면 (1번 위배), client가 사용할 수 있는 여러 인터페이스로 분리하여 제공해야 한다.
  • 사용하지 않는 기능에 종속적이지 않는게 가능해진다.

 

 


 

이렇게 디자인 패턴의 소개와 객체지향의 특성과 규칙까지 알아보았다. 다음 포스팅부터 이러한 객체지향의 사상을 담은 디자인 패턴의 종류를 하나하나 알아보도록 하겠다.

728x90
반응형