개발/[Basic]
[Basic] 객체 지향 특성
바켱서
2020. 6. 10. 17:19
객체 지향 프로그래밍(OOP : Object Oriented Programming)의 특성
1. 추상화 ( Abstaction )
어떤 것을 필요로 하는 속성이나 행동을 추출하는 작업
- 사물들의 공통적인 특징, 즉 추상적인 특징을 파악해 인식의 대상으로 삼는 행위를 말한다.
- 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(클래스)로 다룬다.
-> 각 객체의 구체적인 개념에 의존하지 않고 추상적인 개념에 의존해야만 설계를 유연하게 할 수 있다.
2. 캡슐화 ( Encapsulation )
캡슐화는 정보 은닉을 통해 낮은 결합도와 높은 응집도를 갖도록 한다.
- 정보 은닉
- 필요가 없는 정보는 외부에서 접근하지 못하도록 한다. (prviate)
- private VS public 사용법
- private
- 변하기 쉬운 것은 감추자.외부에서 변해도 영향을 안받는다.
- Field, 자료구조들
- public
- 변하기 어려운 것들은 드러내자.변하기 어려우니까 외부에서 사용하지만 변경될 일이 적음
- private를 변경하거나 얻을 수 있는 메소드들 , ETC..
- private
3. 일반화 관계 ( Generalization )
여러 객체들이 가진 공통된 특성을 부각시켜 하나의 개념으로 성립시키는 과정
- 일반화는 OOP 관점에서 "상속 관계" 라 한다.
- 속성이나 기능의 재사용만 강조해서 사용하는 경우가 많다.
일반화 VS 추상화
일반화: 여러가지 객체로 부터 공통된 점을 추출하여 새로운 객체를 만들어 내는 것. 예를 들어 남학생과 여학생을 일반화 한다면 학생 이라는 개념으로 일반화 시킬 수 있다.
추상화: 어떤 실제 객체로 부터 관심이 있는 부분만을 추출하고 나머지 부분은 무시하는 것(또는 숨기는 것). 대표적인 추상화의 예로 지하철 노선도를 들 수 있다. 지하철 노선도는 실제 지하철 노선 지도로 부터 각 지하철역의 위치 관계만을 추출한 것이다.
출처: http://egloos.zum.com/coart/v/725809
일반화는 또 다른 캡슐화?
일반화 관계와 위임( Delegation )
- 어떤 클래스의 일부 기능만 재사용 하고 싶다면 위임 ( Delegation ) 을 사용하라.
- 자신이 직접 기능을 실행하지 않고 다른 클래스의 객체가 기능을 실행하도록 위임하는 것.
- 일반화 관계는 클래스 사이의 관계이지만 위임은 객체 사이의 관계 이다.
- 위임을 쓰는 방법 ( 간단하게 생각하자! 객체 사이의 관계라 하였다! )
- 1. Extends를 지우고 부모 클래스 였었던 즉, 사용할 클래스를 인스턴스화 하자!
- Ex) Stack<String> instance = new Stack<>();
- 2. 자신의 메서드에서 부모 클래스로 사용했던 메소드가 있다면 모두 instance로 참조하자!
- Ex) instance.add("add");
- 3. 공통적으로 가지고 싶은 메서드를 추가(위임) 해주자!
- 1. Extends를 지우고 부모 클래스 였었던 즉, 사용할 클래스를 인스턴스화 하자!
- 위임을 쓰는 방법 ( 간단하게 생각하자! 객체 사이의 관계라 하였다! )
4. 다형성 ( Polymorphism )
다형성은 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력이다.
- 오버라이딩
- 오버로딩
- 다형적 변수
참고문헌
https://gmlwjd9405.github.io/2018/07/05/oop-features.html