1. 객체지향(Object Oriented Programming)
- 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다.
- 객체의 관점에서 프로그래밍 하는 방법이다.
- 절차지향(Procedural Programming)에 비해서 사람의 사고방식과 더 가깝다.
2. 객체지향의 장단점
1) 장점
코드의 재사용이 용이하다.
남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서
사용할 수 있다.
유지보수가 쉽다.
절차 지향 프로그래밍에서는 코드를 수정해야 할 때 일일이 찾아
수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이
클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만
수정하면 된다.
대형 프로젝트에 적합하다.
클래스 단위로 모듈화 시켜서 개발할 수 있으므로 대형 프로젝트처럼
여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.
2) 단점
처리속도가 상대적으로 느리다.
객체가 많으면 용량이 커질 수 있다.
설계시 많은 시간과 노력이 필요하다.
3. 객체지향 프로그래밍 키워드 6가지
1) 클래스 & 인스턴스
2) 추상화
3) 상속
4) 캡슐화
5) 정보은닉
6) 다형성
1) 클래스 & 인스턴스
- 클래스 (Class)
- 객체를 만들어 내기 위한 설계도 혹은 틀
- 연관되어 있는 변수와 메서드의 집합
- 인스턴스 (Instance)
- 클래스의 현재 생성된 오브젝트
- 클래스의 복제본으로써 클래스 안의 변수를 계속해서 새로 정의하며 중복되어야 하는 곳에 대신 들어가 유용하게 쓰일 수 있다.
- 실체화된 인스턴스는 메모리에 할당 된다.
2) 추상화
- 하위 클래스(sub-class)들의 공통적인 기능을 추출하여 상위 클래스(super class)에 정의하는 것.
- 어떤 객체가 수행하야 하는 핵심적인 역할만을 규정해 두고 실질적인 구현은 해당 클래스를 상속받는 객체들에서 하도록 프로그램을 설계하는 것
3) 상속
- 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
- 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의
속성과 기능들을 간편하게 사용할 수 있도록 한다.
- 반복적인 코드를 최소화 하고 공유하는 속성과 기능에 간편하게 접근하여
사용 할 수 있도록 한다.
4) 캡슐화
- 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것.
- 객체의 응집도와 독립성을 높임으로서 객체의 모듈화를 지향한다.
- '정보 은닉'의 개념중 하나이다
- 자바의 경우 접근 제어자(public, private, protected, default)를 통해 객체의 캡슐화, 은닉화를 구현한다.
5) 정보 은닉
- 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법을 칭한다.
- 대표적인 정보 은닉 기법 3가지
- 객체의 구체적인 타입 은닉 ( = 업캐스팅)
- 객체의 필드 및 메소드 은닉 ( = 캡슐화)
- 구현 은닉 ( = 인터페이스 & 추상 클래스)
- 정보 은닉은 보안적인 측면 뿐만 아니라, 은닉되어 알 필요가 없어
덜 공부하여도 간편하게 사용할 수 있게 해주는 의미도 내포한다.
6) 다형성
- 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
- 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성
- 대표적인 예로 메서드 오버라이딩(method overriding)과
메서드 오버로딩(method overloading)이 있다.