Oop 01

1 minute read


title: “[OOP] 객체 지향 프로그래밍이란?” date: 2019-05-21 15:05:28 -0400 categories: jekyll update — 출처

OOP

  • 클래스? 클래스란 동일한 속성과 행위를 수행하는 객체의 집합이다.
  • 추상화? 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업을 의미한다. 추상화 덕분에 관심이 쏠리는 부분에 더욱 집중할 수 있는 힘을 얻을 수 있다. 사물들의 공통된 특징, 즉 추상적 특징을 파악해 인식의 대상으로 삼는 행위다. 추상화가 가능한 개체들은 개체가 소유한 특성의 이름으로 하나의 집합을 이룬다. 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념으로 다루는 수단이 추상화다.
  • 캡슐화? 응집도는 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다. 결합도는 어떤 기능을 실행하는 데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다. 높은 응집도낮은 결합도를 유지할 수 있도록 설계해야 요구사항을 변경할 때 유연하게 대처할 수 있다. 캡슐화는 특히 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리다. 캡슐화는 정보은닉(알 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것)을 통해 높은 응집도와 낮은 결합도를 갖도록 한다. 정보은닉은 왜 필요한거야? SW는 결합이 많을수록 문제가 많이 발생한다. 한 클래스가 변경이 발생하면 변경된 클래스에 의존하는 다른 클래스들도 변경해야 할 가능성이 커진다는 뜻이다. 따라서 정보은닉을 통해 알 필요가 없는 정보는 외부에서 접근하지 못하도록 하여 외부 클래스에 대한 결합도를 낮춰야하는 것이다.
  • 일반화? 집합론적 관점에서 일반화는 상호 배타적인 부분 집합으로 나누는 과정으로 간주할 수 있으며, 이를 이용해 상호 배타적인 특성이 요구되는 상황에 일반화 관계를 적용할 수 있다.
  • 다형성? 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력이다. 다형성은 일반화 관계와 함께 자식 클래스를 개별적으로 다룰 필요 없이 한 번에 처리할 수 있게 하는 수단을 제공한다. 다형성을 사용하는 경우에는 구체적으로 현재 어떤 클래스 객체가 참조되는지와 무관하게 프로그래밍을 할 수 있다.

  • 인간 중심적 프로그래밍 패러다임
  • 현실 세계 -> 반영 -> 프로그래밍
  • 애플리케이션에 필요한 특징들을 뽑아서 프로그래밍 하는 것(추상화)
  • OOP로 코드를 작성하면 이미 작성한 코드에 대한 재사용성이 높다.
  • 내부 구현에 대해 알지 못해도 라이브러리 API(인터페이스)가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아진다.
  • 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅, 유지보수가 쉬워진다.
  • 데이터 모델링을 할 때, 객체와 맵핑하는 것이 자연스럽기 때문에 요구사항을 보다 명확하게 파악하여 프로그래밍 할 수 있다.
  • 객체적 방법의 단위는 ‘객체’ 혹은 ‘클래스’이다.
  • 객체 = 데이터 + 함수; 데이터와 함수가 뭉쳐있기 때문에 나중에 추가하기가 쉽다. 떨어져 있으면 데이터가 바뀌어야 할 때 함수가 항상 영향을 받는 구조가 된다.
  • 객체 지향은 요구의 변경에 의한 결과를 최소화 시킨다.

  • SOLID
    1. 단일 책임의 원칙
    2. 개방 폐쇄 원칙
    3. 리스코프 치환 원칙
    4. 인터페이스 분리 원칙
    5. 의존 역전 원칙

Updated: