프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
▶ 코드 재사용이 용이합니다.
남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.
▶ 유지 보수가 쉬움
절차지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
▶ 대형 프로젝트에 적합
클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담하기 쉽다..
▶ 처리 속도가 상대적으로 느림
▶ 객체가 많으면 용량이 커질 수 있음
▶ 설계시 많은 시간과 노력이 필요
1) 클래스와 인스턴스
2) 추상화
공통의 속성이나 기능을 묶어 이름을 붙이는 것
- 객체지향적 관점에서 클래스를 정의하는것은 추상화 ex) 사자,고양이, 강아지 등을 객체라고 하며 이 객체들의 공통적으로 동물로 표현가능한것을 추상화라고함
3) 캡슐화
특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것
- 모듈화를 의미. 이러한 캡슐화를 통해 정보를 객체 안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보 은닉 효과
4) 상속
상위 개념의 특징을 하위 개념이 물려받는 것을 상속
5) 다형성
같은 모양의 코드가 다른 행위를 하는 것 ex) 오버라이딩, 오버로딩
클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메서드로 정의한것으로 객체를 만들기 위한 메타정보
인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
은닉화 : 외부에서 객체의 속성을 함부로 접근하지 못하도록 하는것
캡슐화 : 메서드 안에서 어떠한 일이 일어나고 있는지 모르게 해야되는 것(기능 은닉)
단어 그대로 '절차적'으로 코드를 구성하는것!
데이터에 대한 순서를 파악하고 필요한 기능을 함수로 만들어 절차적으로 진행시키는 방법