프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고,
그 객체들 간 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법.
다시 적어보자면, 상태와 행위를 가진 객체들을 레고 블럭처럼 조립해서
하나의 프로그램을 만드는 것을 객체 지향 프로그래밍이라고 할 수 있다.
- 코드 재사용이 용이
기존에 만들어진 클래스를 재사용할 수 있고 상속을 통해 확장 가능- 유지 보수가 편리
수정해야 할 부분이 클래스 내부에 있으므로 해당 부분만 수정하면 됨.- 대형 프로젝트에 적합
클래스 단위로 모듈화시켜서 개발 -> 업무 분담의 편리성 향상단점
- 처리속도가 상대적으로 느림
- 객체의 수 증가 -> 용량이 커질 수 있음
- 설계시 많은 시간과 노력이 필요
좋은 객체를 만드는 것을 다른 말로 설계를 잘하는 법이라고 할 수 있는데,
좋은 설계는 현실을 잘 반영해야 한다.
추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것.
불필요한 정보는 놔두고, 중요한 정보만을 표시함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것.
물고기, 사자, 토끼, 뱀이라는 이름을 가진 객체가 각각 있고
이 객체들을 하나로 묶으려고 할 때, 동물 또는 생물이라는
추상적인 객체로 크게 정의하여 묶는 것을 추상화라고 한다.
데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것.
=> 변수와 함수를 하나로 묶는 것을 뜻한다.
캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해지는 효과가 있다.
상위 개념의 특징을 하위 개념이 물려받은 것
부모 클래스의 속성과 기능을 그대로 물려받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있다.
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
getter, setter을 사용하면 메소드를 통해 접근하기 때문에,
올바르지 않은 입력에 대해 사전에 처리할 수 있도록 제한하거나 조절할 수 있기 때문이다.