본문 바로가기

프로그래밍/JAVA

OOP? 객체지향

OOP

객체 지향 프로그래밍(Object Oriented Programming), 객체라는 기본단위로 나누고 객체의 상호작용을 서술하는 방식, 쉽게 현실 세계를 프로그램 언어로 서술한 것

추상화

  • 어떤 영역에서 필요로하는 하는 속성이나 행동을 추출하는 작업
  • 여러 개체들의 집합을 클래스라고 부름 (일반화하다)

캡슐화

  • 관련 있는 데이터와 함수를 하나의 단위로 묶는 것
  • 약속된 부분을 제외한 나머지 부분을 캡슐로 감싸서 숨겨 버린다.(즉, 원하는 부분을 외부로 부터 숨길 수 있음)
  • 사용자는 내부의 부분을 모르더라도, 약속된 부분을 통하여 사용할 수 있다.
  • 보통 클래스에서 숨길 부분은 private로 두며, 함수, 즉, 사용자가 조작하여 원하는 값을 얻을 수 있는 약속된 기능을 public에 둔다

정보 은닉

  • 클래스 외부에서 알 필요가 없는 정보에 대해서 외부에서 접근하지 못하도록 제한(은닉)하는 것
  • 정보 은폐를 지원하기 위해 private,public,protected 드으이 액세스 지정자(접근 제어 지정자)를 제공하여 숨길 멤버와 공개할 멤버를 구분한다.
  • 내부 속성의 타입이나 로직이 변경되었다고 해서, 메서드의 반환 타입을 기존과 같이 유지한다면 참조하고 있는 다른 코드를 변경할 필요가 없음
  • 변경이 필요하다면, 추 후에 deprecated 등의 신택스를 사용해 서서히 옳바른 코드로 변경해나가면 됨

일반화 관계

  • 정보, 기능의 재사용도 가능함 (슈퍼클래스의 메서드를 오버라이드하지 않은 이상 그대로 사용 가능)
  • 클래스 자체를 캡슐화 (클래스를 자식클래스에서 상속받아 기존 메서드를 오버라이드 함으로써 메서드가 아닌 클래스 수준의 캡슐화가 가능하다.)
  • 일반화 관계는 A is kind of B 가 성립해야한다.
    • 성립이 되지 않는 경우에는 위임(delegate)한다.
    • 위임은 대상의 B를 내부 속성으로 두고 위임메서드를 생성해 기능을 동일하게 호출하면 된다.

다형성

서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력

  • 예를 들어 새, 강아지, 고양이들의 talk()라고 했을 때 서로 다른 소리를 냄
  • 하지만 위 예는 모두 동물이라는 하나의 집합으로 표현할 수 있음

피터 코드의 상속 규칙

  • 자식 클래스와 부모 클래스 사이는 역할 수행(is role played by) 관계가 아니여야 한다.
  • 한 클래스의 인스턴스는 다른 클래스의 인스턴스로 변환할 필요가 절대 없어야한다. (애초에 불가능)
  • 자식 클래스는 부모의 클래스의 책임을 무시하거나 재정의 하지 않고 확장만 수행해야한다.
  • 자식 클래스가 단지 일부 기능을 재사용할 목적으로 유틸리티 역할을 수행하는 클래스를 상속하지 않아야한다.
  • 자식 클래스가 역할, 트랜잭션, 디바이스 등을 특수화(specialization, 명확하게 하다)해야한다.



출처: http://sticky32.tistory.com/entry/소프트웨어-객체지향의-기본원리-정리#캡슐화 [Sticky]

'프로그래밍 > JAVA' 카테고리의 다른 글

java json 라이브러리 별 parser 속도 비교.  (0) 2018.03.17
구분자로 ArrayList에 담기  (0) 2018.03.12
자바 정규식  (0) 2018.03.04
변수 토글 방법  (0) 2018.03.04
디자인 패턴  (0) 2018.01.30