현실세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있다. 이러한 기법을 '객체지향 프로그래밍'이라고 함
세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미
: 예를 들면 물리적으로 존재하는 자동차, 도서관, 계산기를 객체라고 볼 수 있음
: 강의, 배달 주문, 운동과 같은 개념적인 것 또한 식별이 가능하기에 객체라고 볼 수 있음
객체의 구성 : 속성과 행위
Java는 이러한 속성과 행위를 필드(속성)와 메서드(행위)로 정의하여 구현할 수 있다.
현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것
✅ 이해하고 넘어가기!
- 사람 객체는 자동차 객체의 가속 페달이라는 메서드
gasPedal();
를 호출
: 그러면 자동차 객체는 이에 반응하여 속소 속성의 값을 증가시킴- 사람 객체는 자동차 객체의 브레이크 페달이라는 메서드
brakePedal();
를 호출
: 그러면 자동차 객체는 이에 반응하여 속소 속성의 값을 감소시킴
- 소프트웨어의 객체들은 메서드를 통해 데이터를 주고 받을 수 있음
- 사람 객체는 메서드를 호출할 때 괄호() 안에 데이터를 넣어 호출할 수 있는데 이 때 이 괄호 안에 넣는 데이터를 '파라미터' 혹은 '매개값'이라고 표현함
사용관계
포함 관계
🌟(중요!) 상속 관계
공장에 자동차만 생산하는게 아니라 기차도 생산하고, 자동차와 기차 객체는 하나의 공통된 기계시스템 객체를 토대로 만들어진다고 가정했을 때
자동차 객체
캡슐형 알약을 보면 캡슐 안에 가루를 담아 하나의 캡슐로 만드는데 그 안에 어떤 가루들이 섞여있는지 모르는 것처럼, 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후, 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미함
부모 객체
와 자식 객체
가 존재함부모 객체
는 가지고 있는 필드와 메서드를 자식 객체
에 물려주어 자식 객체가 이를 사용할 수 있도록 만듦상속을 하는 이유
- 각각의 객체들을 상속 관계로 묶음으로서 객체 간의 구조 파악이 쉬워짐
- 필드와 메서드를 변경하는 경우,
부모 객체
에 있는 것만 수정하면자식 객체
에 전부 반영이 되기 때문에 일관성을 유지하기 좋음자식 객체
가부모 객체
의필드
와메서드
를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들면서 코드의 재사용성이 증가됨
(설계도 관점에서 A객체와 B객체를 만들었을 때를 가정하는 이미지)
'경적을 울리다'
라는 행위horn();
메서드의 구현을 다르게 재정의하여 사용할 수 있음객체에서 공통된 부분들을 모아 상위 개념
으로 새롭게 선언하는 것
공통적이고 중요한 것들을 모아 객체를 모델링함
현실 세계의 여러 종류의 자동차들이 공통적으로 가지고 있는 가속, 브레이크, 속도
와 같은 것들을 모아 자동차라는 객체를 모델링할 수 있다.
생산
함인스턴스
라고 부르며 이 과정을 인스턴스화
라고 부름✅ 기억해야할 것
클래스 : 객체를 만들기 위한 설계도