https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=290892473 

 

헤드 퍼스트 디자인 패턴

하나의 패턴에 하나의 이야기를 담았다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어낸다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문

www.aladin.co.kr

지속가능한 개발을 위하여 꼭 읽어보라는 평가가 많았기에 샀던 책이고 또 굉장히 공부하고 싶었던 개념이지만 이해가 안되서 책장 속에 넣어두었던 책이다. 블로그에 글을 쓰면서 정리하다보면 언젠가는 완독하지 않을까? 싶어서 시작하게 되었다. 처음에는 허술하게 넘어가도 나중가서 이해할 수도 있으니, 진행에 따라 모든 글들은 언젠가 다시 수정될 여지가 있다.

 

방금 1장을 읽어보고 왔는데, 1장에서 나온 전략 패턴을 정리하기 전에....

이 글을 통해 머리 속 오랫동안 쳐다보지도 않은 객체지향이라는 개념과 정의들을 다시 정리하고자 한다.

 

객체 지향 프로그래밍(OOP):

컴퓨터 프로그래밍 패러다임. 컴퓨터 프로그램을 명령어의 집합으로 보는 시선에서 벗어나, 객체와 객체들의 상호작용을 묘사한 것으로 바라보자는 주장이다. 객체 지향 프로그래밍을 통해 만들어진 프로그램은 유연하고 변경이 쉽다.

 

객체 지향 프로그래밍의 4 요소

  • 추상화 : 현실의 개체로부터 프로그램 내에서 필요한, 사용할 수 있는 객체로 단순화 하는 과정. 불필요한 코드를 제거하고 핵심적인 특성만 포착하여 코드의 복잡성을 줄이고 일관성을 유지하여 가독성을 높여야 한다.
  • 캡슐화 : 객체의 상태와 행동을 하나로 묶고 그 내부의 구현은 외부에 보이지 않도록 감추는 것. 객체 내부의 메서드를 통해서만 데이터를 조작할 수 있어 데이터의 무결성을 보장하고, 코드의 재사용성과 유지관리를 용이하게 한다.
  • 다형성 : 하나의 함수, 자료형, 클래스 등 따위를 여러가지 형태로 사용할 수 있게 하는 것. 동일한 이름의 메서드를 호출하더라도 형태에 따라 서로 다른 동작을 할 수 있으면 코드의 재사용성을 높이고 객체간의 결합도를 낮추며 확장성을 개선할 수 있다.
  • 상속  : 한 클래스가 다른 클래스의 특성을 물려 받을 수 있는 것. 상속을 통해 기존 코드들을 재활용하고 중복 코드를 줄일 수 있다. 다만 원칙에서도 그렇고 요즘들어 상속 자체는 그렇게 권장되지는 않는 것 같다고 생각

 

객체지향 원칙(SOLID)

 

S / SRP - 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야한다.

O / OCP - 개방-폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야한다

L / LSP - 리스코프 치환 원칙 : 하위 클래스는 언제나 상위 클래스를 문제없이 대체할 수 있어야한다.

I / ISP - 인터페이스 분리 원칙 : 클라이언트에서 사용하지 않는 메서드에 의존하지 않아야한다. -> 커다란 인터페이스를 작은 인터페이스로 쪼개서 꼭 필요한 메서드만 써야 한다

D / DIP - 의존관계 역전 원칙 : 상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다. -> 제일 이해안되는 부분이지만 아마 구현보다는 인터페이스에 맞춰 프로그래밍한다는 의미와 일맥상통 하는게 아닐까 생각한다.

 

책속에서 나온 객체지향 원리

 

1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.

-> 달라지는 부분을 찾아 다른 코드에 영향을 끼치지 않도록 캡슐화 한다

-> 바뀌지 않는 부분에 영향을 미치지 않고 특정 부분만 고치거나 확장할 수 있다.

 

2. 구현보다는 인터페이스에 맞춰 프로그래밍한다.

-> 상위 형식에 맞춰서 프로그래밍한다는 의미

-> 실제 실행시에 쓰이는 객체가 코드에 고정되지 않도록 상위 형식에 맞춰 프로그래밍해서 다형성을 활용해야한다.

-> 변수를 선언할 때 추상 클래스나 인터페이스 같은 상위 형식으로 선언해야한다. 객체를 변수에 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체도 넣을 수 있기 때문이다. 그러면 변수를 선언하는 클래스에서 실제 객체의 형식을 몰라도 된다

 

3. 상속보다는 구성을 활용한다.

-> 'A에는 B가 있다'는 관계를 이용하여 클래스를 합치는 것을 '구성을 이용/활용한다'고 표현한다.

 

이제는 말할 수 있다. 디자인 패턴은 객체지향 프로그래밍 설계 중 자주 발생하는 문제들을 피하기 위해 사용되는 프로그래밍 디자인 형식(pattern)이다.

'공부하는 중 > 디자인 패턴' 카테고리의 다른 글

2. 옵저버 패턴  (0) 2023.05.02
복사했습니다!