[JAVA 문법 종합반 4일차-객체지향]

김동규·2023년 5월 25일
0

설계도(클래스)

객체란

세상에 존재하는 물체를 뜻하며 식별이 가능 한 것을 의미
ex. 차, 도서관, 컴퓨터 등..
ex. 강의, 운동, 등 개념적인 것 또한 식별이 가능하여 객체로 볼 수 있다.

객체는 속성행위로 구성되어 있다.
자동차를 기반으로 하여 객체를 살펴보면
회사,모델,색상,가격,속도 등의 속성을 가질 수 있고
가속, 브레이크, 기어변속, 조명, 경적 등의 행위를 가질 수 있다.

Java는 이런 속성행위필드매서드로 구현이 가능하다.

정리

속성 = 필드 / 행위 = 매서드

이처럼 현실 세계에 있는 객체를 소프트웨어 객체로 설계하는 것을'객체 모델링'이라 부른다.

객체 간의 협력
현실세계의 사람과 자동차의 각각 개체는 서로 행위를 통해 상호작용하여 협력할 수 있다.
ex 1. 사람이 차의 가속페달을 밟으면 차는 반응하여 속도를 올려 이동
ex 2. 사람이 브레이크를 밟으면 자동차는 이에 반응하여 속도를 줄이며 정지

소프트웨어 객체 끼리는 행위를 정의하는 Java의 매서드를 통해 이뤄진다.

사람 객체는 자동차 객체가 가지고 있는 가속페달 매서드 gasPedal();를 호출한다.
→자동차 객체는 이에 반응하여 속도 속성의 값을 증가시킨다.

사람 객체가 자동차 객체가 가지고 있는 브레이크 페달 매서드를 호출 breakPedal(); 하면
→ 자동차 객체는 이에 반응하여 속도의 속성 값을 감소시킨다.

소프트웨어 객체들은 매서드를 통해 데이터를 주고 받을 수 있다.
사람 객체는 매서드를 호출할때 괄호 ()안에 데이터를 넣어 호출할 수 있는데 이 괄호안의 데이터를 '파라미터' 혹은 '매개값' 이라고 표현한다.

사람 객체는 gasPedal(50); 과 같이 매서드 괄호 안에 50의 매개값을 넣어 호출하면, 자동차 객체는 해당하는 50의 데이터를 전달 받아 자동차 객체 속성인 속도 값을 50으로 만든다.

또한 자동차 객체는 gasPedal(50); 매서드에서 속도를 바꾸는 작업을 수행 후 사람 객체에서 실행 결과인 속도의 값을 반환할 수 있다. 이때 반환되는 값을 '리턴값' 이라 표현한다.

객체관의 관계

사람객체는 자동차 객체를 사용하는 '사용의 관계'를 맺고 있다.
객체지향 프로그래밍: 필요한 부품들을 하나씩 만들고 조립하여 완성된 프로그램을 만드는 기법

사용 관계


사람과 차는 각각 독립된 객체이다.

포함 관계


Car라는 객체 안에 Tire객체, Door객체, Handle객체들이 포함되어 있다.

상속 관계


공장안에 차 뿐만 아니라 기차도 생산한다 할 때
자동차와 기차는 공통된 기계시스템 객체를 토대로 만들어진다고 가정하면,
자동차 객체와 기차 객체는 기계시스템 객체를 상속받는 상속관계가 된다.

객체지향 프로그래밍 특징

캡슐화 (encapsulation)

속성(필드)행위(매서드)하나로 묶어 객체로 만든 후 외부에서 실제 내부 구현 내용을 알 수 없게 감추는 것
보안적 속성과 불필요한 내용을 보여주지 않아 혼선을 줄이는 역할 가능

객체를 숨기기 때문에 외부 객체에서 필드와 매서드를 잘못 사용하여 객체가 변화하는 경우를 방지함

Java에서 캡슐화된 객체의 필드와 매서드를 노출할지 감출지 결정하기 위해 접근제어자(ex. Public, Private, Default)를 사용한다.

상속

객체지향 프로그래밍은 부모 객체와 자식 객체가 존재
부모 객체는 가지고 있는 필드매서드를 자식 객체에게 물려줘 자식 객체가 이를 쓸 수 있도록 만들 수 있다.(Overriding 개념)

상속을 하는 이유
1. 각 객체들을 상속 관계로 묶어 객체간 구조를 파악하기 쉬워진다.
2. 필드와 매서드를 변경하는 경우 부모객체에 있는 것만 수정하면, 자식 객체 전부 반영이 되므로 일관성 유지에 좋다.
3. 자식 객체가 부모 객체의 필드와 매서드를 물려받아 사용할 수 있기 때문에 코드 중복이 줄며, 코드의 재사용성이 증가한다.

다형성(여러개의 형체)

객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가진 고유한 특성에 따라 여러가지 형태로 재구성되는 것

Car 클래스를 토대로 자동차 객체를 만들 때 A자동차 객체와 B자동자 객체의 경적 소리가 다르면 '경적을 울리다' 행위 즉, horn(); 매서드 구현을 다르게 재정의하여 사용이 가능하다.

추상화

객체에서 공통된 부분을 모아 상위 개념으로 새롭게 선언하는 것

공통적이고 중요한 것들을 모아 객체를 모델링 한다.

객체와 클래스

객체를 생성하기 위해서는 설계도가 필요하다.
현실세계는 자동차를 만들기 위해 자동차 설계도를 토대로 생산한다.
소프트웨어는 객체를 만들기 위해서 설계도에 해당하는 클래스가 필요하다.

클래스를 토대로 생성된 객체를 해당 클래스의 '인스턴스' 라고 부르며 이 과정을 '인스턴스화' 라고 부른다.

동일한 클래스로 여러개 인스턴스를 만들 수 있다.
객체와 인스턴스는 거의 비슷한 표현이지만 자세히 구분하면 하위 그림과 같다.

자동차 클래스를 통해 만들어진 하나의 자동차를 인스턴스라고 부르며, 여러개의 인스턴스를 크게 통틀어 자동차 객체라고 표현할 수 있다.

'자동차 클래스' → 자동차 인스턴스1 ~ .... → '자동차 객체'

자동차설계도(클래스)를 바탕으로 만들어진 자동차 인스턴스는 모두 각각의 자동차 객체가 된다.

따라서 소스코드에서 작성해왔던 'Class 클래스이름' → 객체를 만들기 위한 설계도

profile
안녕하세요~

0개의 댓글