본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/4. 객체지향 프로그래밍

1. Java 자바 - 객체 지향 프로그래밍

객체 지향 프로그래밍 (OOP : Object Oriented Programming)

 

부품에 해당되는 객체들을 먼저 만들고 하나씩 조립해서 완성된 소프트웨어를 만드는 기법

 

완성품인 객체를 모델링하고 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체들을 하나씩 설계 후

조립하는 방식으로 프로그램을 개발한다.

 


 

객체(Object)

 

물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고,

다른 것과 식별 가능한 것 (자동차, 자전거, 책 등..)

 

객체는 속성동작으로 구성되어 있다.

(사람 : 이름, 나이, 걷다, 웃다 ..  자동차 : 색상, 모델명, 가속, 브레이크, . . .)

 

자바에서는 이런 속성과 동작을 각각 필드(속성), 메소드(동작)로 부른다.

 

 

소프트웨어 객체 모델링

 

 

객체 모델링

 

현실 세계의 객체를 소프트웨어 객체로 설계한다.

현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정이다.

 

 

객체의 상호작용

 

현실 세계의 모든 현상은 객체와 객체간의 상호작용으로 이루어져 있다.

 

(사람 : 더하기 기능 사용,  계산기 : 더하기 기능의 결과 반환)

 

소프트웨어에서도 객체들은 각각 독립적으로 존재하고, 객체간 메소드를 통해 상호작용한다.

 

객체가 다른 객체의 기능을 이용하는 것이 메소드 호출이다.

 

객체의 메소드 호출을 이용한 상호작용

 

 

메소드 호출 형태

 

객체에 도트( . ) 연산자를 붙이고 메소드 이름을 기술한다.

도트 연산자는 객체의 필드나 메소드에 접근할 때 사용한다.

 


반환값 = 객체.메소드(매개값1, 매개값2, . . . )

 

int result = Calculator.add(10, 20);     // 반환할 값을 result 변수에 저장

 

 

 

객체 간의 관계

 

객체는 개별적으로 사용될 수 있지만 대부분 다른 객체와 관계를 맺고 있다.

(관계 종류 : 집합 관계, 사용 관계, 상속 관계)

 

집합 관계 : 하나는 부품, 하나는 완성품에 해당한다. (자동차 : 엔진, 타이어 . . .)

 

사용 관계 : 객체 간의 상호작용을 의미한다. 객체는 다른 객체의 메소드를 호출하여 원하는 결과를 얻는다.

( 사람 - 자동차 : 가속(메소드) )

 

상속 관계 : 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 의미한다.

 

    일반적으로 상위 객체종류 의미, 하위 객체구체적인 사물에 해당된다.

    (자동차는 기계의 종류 - 기계(상위) 객체, 자동차(하위) 객체로 나뉜다.)

 

객체간의 관계

 


 

객체 지향 프로그래밍의 특징

 

캡슐화, 상속, 다형성

 

- 캡슐화 (Encapsulation)

 

객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용은 감춘다.

 

따라서 외부 객체는 객체 내부의 구조를 알 수 없고,

객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.

 

 

 

외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 필드와 메소드를 캡슐화하여 보호한다.

 

자바는 캡슐화된 멤버를 노출시킬 것인지, 숨길 것인지 결정을 위해 접근 제한자를 사용한다.

 

접근 제한자 : 객체의 필드와 메소드의 사용 범위를 제한하여 외부로부터 보호한다.

 

 

- 상속 (Inheritance)

 

부모 역할의 상위 객체가 자식 역할의 하위 객체에게 자기가 가지고 있는 필드와 메소드를 하위 객체에게

물려주어, 하위 객체가 사용할 수 있도록 한다.

 

 

상위 객체를 재사용해서 하위 객체를 쉽고 빨리 설계할 수 있다.

(코드의 재사용성 높임, 반복된 코드 중복 줄임)

 

상속은 상위 개체의 수정으로 모든 하위 객체들의 수정 효과를 가져오므로

유지 보수 시간을 최소화 시킨다. (유지보수성)

 

 

- 다형성 (Polymorphism)

 

같은 타입이지만, 실행 결과가 다양한 객체를 이용할 수 있는 성질

 

하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.

 

자바는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다.

 

부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다.

 

다형성의 효과 : 객체는 부품화가 가능하다.

  (자동차 설계 시 타이어 인터페이스 타입 적용했다면,

  이 인터페이스를 구현한 실제 타이어들은 어떤 것이든 상관 없이 장착(대입) 가능)

 

ex) 자동차의 타이어 타입(규격)으로 한국 타이어, 금호 타이어를 사용하지만, 타이어의 성능은 다르다.