객체는 모든 것이다.
우리가 눈으로 인식하는, 손으로 만져지는, 머리로 상상하는 모든 것이 객체이다.
각각의 객체는 다음과 같은 특징을 가진다.
행위를 가진다.속성을 가진다. 이 세상의 모든 객체는
행위를 가진다.
가진다라 표현한 이유는, 객체지향 프로그래밍에서 객체는 수동적인 존재이기 때문이다.
위에서 객체는 행위와 속성을 가진다고 했다.
이 객체들을 비슷한 속성을 가진 것끼리 분류하기 위한 개념이 클래스이다.
따라서, 클래스는 분류에 대한 개념이지 실체가 아니다.
클래스를 붕어빵틀, 인스턴스를 붕어빵에 비유하는 글을 많이 봤을 것이다.
그렇다면, 아래에 동의 하는가?
붕어빵틀 붕어빵 = new 붕어빵틀();
클래스와 인스턴스 사이의 관계에 어색함을 느낄것이다.
이는, 클래스를 분류로 보는것이 아닌, 하나의 실체로 봤기 때문이다.
실체하는것은 인스턴스 뿐이다.
클래스가 분류라는것을 인정하고 다음과 같은 예제를 보자.
붕어빵 붕어빵1 = new 초콜릿붕어빵();
붕어빵 붕어빵2 = new 딸기붕어빵();
붕어빵 붕어빵3 = new 복숭아붕어빵();
클래스와 객체의 관계를 분류와 실체로 정의한다.객체지향의 4대 특성은 클래스와 객체를 통해 구현된다.
도메인)에서 필요로 하는 정보만을 프로그램 내에서 가지면 된다.따라서, 추상화를 위해선 도메인의 정의가 우선이 되야 한다.추상: 여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 과정
캡슐화
이전에 말했듯이, 객체지향 프로그래밍은 객체간의 의사소통을 모방하여 프로그래밍하는 것이다.
각 객체는 고유의 속성을 가진다.
캡슐화는 이 속성을 가리고 행동을 통해 동작하도록 한다
이를 통해, 객체의 속성이 외부에 의해 의도치않게 변경되는 위험을 제거할 수 있다.
상속
상속은 슈퍼클래스를 확장하고, 재사용하는것이다.
서브 클래스와 슈퍼 클래스의 관계는 is kind of관계이다.
서브 클래스 is kind of 슈퍼 클래스
이는 위에서 말한 분류의 개념에 입각한 것이다.
다형성
하나의 인터페이스나 메서드가 다양한 형태의 객체나 동작을 처리할 수 있도록 하는 개념
하나의 참조를 통해, 여러 인스턴스를 호출할 수 있는점이 가장 큰 예이다.