Lewis's Tech Keep

[OOP] OOP 특성 본문

JAVA/개체지향 프로그래밍 with JAVA

[OOP] OOP 특성

Lewis Seo 2021. 5. 18. 00:40

- 보통은 4가지 특성

- 문헌에 따라 3가지 또는 7가지로 나누기도 함

 

 

 중요한 3가지

 

- 캡슐화 (encapsulation)

 : 데이터 & 데이터에 작용하는 메서드를 하나로 묶는 것

 : 정보 숨기기 (data hiding): 개체 안에 있는 데이터를 외부로 부터 보호 

 

- 상속 (inheritance)

 : 이미 존재하는 개체를 기반으로 확장 -> 진화와 같음 새로운 개체는 상속되는 개체의 모든 것을 이어받는 존재 

 : 코드 중복을 막는다, 사람은 점진적 개념일 때 가장 효율적이다

 

- 다형성(polymorphism)

 : 같은 지시를 내렸지만 다른 종류의 개체가 동작을 달리하는 것 (overriding)

 : 함수 구현이 실행될 지는 실행 중에 결정 된다 = 늦은 바인딩 (late binding) [ early binding 은 컴파일 중에 결정됨 ]

 : 다형성은 상속 관계가 필요하다

 

    엄밀하게 말할 때의 다형성

    - 애드혹(ad-hoc) 다형성 - 맞춤형 다형성과 같은 느낌 

     : 함수 오버로딩, 연산자 오버로딩에 해당 됨

    - 매개변수 다형성 - 제네릭 

     : 제네릭 적용할 때 

 

+ 1가지

 

- (데이터) 추상화 (abstraction)

 : 일반화, 개체 속에 있는 실제 데이터나 함수 구현 방법에 종속되지 않겠다.

 : (반대의미) 구체화 -> 개체 속에 안 쪽에서 무엇이 일어나는 지 전부 다 알려고 하는 것

 

    - 데이터 추상화

      : 개체 사용 시 정확히 어떤 데이터가 있는 지 알 필요 없음

      : 개체 안에 있는 데이터 직접 접근 하지 않는다 ( 대신에 함수를 통해 접근 )

      : 즉, 캡슐화(encapsulation)는 데이터 추상화를 이루는 방법 중 하나

    - 다형성을 통한 추상화 

      : 추상 클래스(abstract class) or 인터페이스(interface) 를 사용

 

나머지 3가지

 

- 연관 (association)

 : 상속과 반대적 효과 (상속의 장점 -> 연관의 단점, 연관의 장점 -> 상속의 단점)

 : 집합 + 컴포지션 : 연관

 

- 컴포지션 (composition)

 : 조립 부품 하나하나가 의미가 없지만 모으면 개체가 됨

 : 조립품이 소멸할 때 부품도 같이 소멸

 

- 집합 (aggregation)

 : 조립하지만 하나하나가 의미가 있어서 따로 봐도 의미가 있지만 모으면 다른 의미의 개체가 됨

 : 조립품이 소멸해도 부품이 소멸되지 않는다.

Comments