객체
컴퓨터 과학에서 객체(object)는 물리적으로 존재하거나 추상적으로 생각할수 있는 것 중에서 자신의 속성을 가지고 있고 다른것과 식별 가능한것을 말한다.
_
객체 모델링
현실세계의 객체를 소프트웨어 객체로 설계하는 것
즉, 현실 객체의 속성과 동작을 추려내서 소프트웨어 객체의 필드와 메서드로 정의하는 과정이라고 할 수 있다.
실제 세계를 모델링하여 '객체'들의 상호작용으로 서술하는 프로그래밍 기법
객체의 공통적인 속성과 기능을 추출하여 정의하는 것
- 객체 수행 목적에 따라 데이터 구조 및 처리방법(객체의 필드 및 메서드)을 결합시켜 묶어서, 외부에 내부기능구현내용을 감추고 이용방법만 알려줌
- 외부객체는 객체내부의 구조를 알지 못하며, 객체가 노출해서 제공하는 필드와 메서드만 이용할수 있음
캡슐화에서 중요한 키워드 ☆☆☆은닉화☆☆☆
은닉화란?
- 외부로부터 객체 내부에 대한 접근을 제한하기 위해 은닉 혹은 격리시키는것
- 내부의 중요사항이 외부에 노출되지 않도록 막음
- 캡슐화의 한 개념으로 더 구체적인 개념
- 변수의 접근제한자를 private로 지정하고 setter, getter로 접근, 제어함
상위 개념의 특징을 하위 개념이 물려받아 사용하는것
상속과 연관있는 개념으로 한 객체가 다른 여러형태(객체)로 재구성되는것
오버라이딩
: 상속받은 자식클래스에서 부모클래스의 (추상)메서드의 내부로직을 재작성한다. 부모클래스의 외부구현내용(메소드명, 반환타입, 매개변수)은 그대로 유지한다
오버로딩
: 하나의 클래스에서 같은 이름을 가진 오퍼레이션을 여러개 정의할수 있다. 하지만 매개변수는 무조건 달라야하고, 반환타입은 매개변수가 다르다면 아무상관없다.
1 ) 재사용성 : 상속을 통해 프로그래밍시 코드의 재사용성을 높일수 있음
2) 생산성 향상 : 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬수 있음
3) 자연적인 모델링 : 일상생활 모습의 구조가 객체에 자연스럽게 녹아들어있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할수 있음
4) 유지보수의 우수성 : 기존 기능을 수정 시 함수를 새롭게 바꾸더라도 캡슐화와 그 함수의 세부정보가 은폐되어 있어 주변에 미치는 영향을 최소화 함. 새로운 객체의 종류를 추가 시에는 상속을 통하여 기존의기능을 활용하고 존재하지 않은 새로운 속성만 추가하면 되므로 매우 경제적임.
1) 많은 오버헤드가 발생 가능성: 객체간의 정보교환이 모두 메시지 교환을 통해 일어나기 때문.
오버헤드란?
어떤 처리를 하기위해 소모되는 간접적인 처리 시간, 메모리 등
2) 상태를 가지는 객체로 인한 버그 발생 가능성 : 내부 변수로 인해 객체가 예측할 수 없는 상태를 갖게되기 때문.
클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나여야 함.
상위타입의 객체를 하위타입의 객체로 치환해도 상위타입을 사용하는 프로그램은 정상적으로 동작해야함.
참고사이트
https://mizzo-dev.tistory.com/entry/OOP
http://wonwoo.ml/index.php/post/1780