본문 바로가기

6. 클래스

6.1 객체지향 프로그래밍

6.1.1_객체지향프로그래밍이란 (Object Oriented Programing)

어떤 제품을 만들 때 부품을 먼저 만들고 그 부품들을 하나씩 조립해서 완성된 제품을 만든다. 이와같은 방법을 소프트웨어를 개발 할 때에도 적용 한 것이 객체지향 프로그램이다. 

 

객체지향프로그램

[부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법]

 

객체

[물리적으로 존재(eg.자동차)하거나 추상적으로 생각 할 수 있는 것(eg.삼성, 날짜..) 중에서 자식의 속성을 가지고 있고 다른 것과 식별 가능 한 것]

 

*객체의 구성요소

1. 속성 = 필드

2. 동작 = 메소드

 

객체모델링

[현실세계의 객체를 소프트웨어 객체로 설계하는 것]


6.1.2_ 객체의 상호작용

<현실세계의 상호작용>

사람이 전자계산기의 기능을 이용하고 전자계산기는 계산 결과를 사람에게 알려줌

<소프트웨어>

-객체들끼리 메소드를 호출하고 결과를 받는다.(=결과를 리턴)

 


*메소드 호출 

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

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

리턴값 = 객체.메소드(매개값1, 매개값2,..);

 

매개값

[메소드를 실행하기 위해 필요한 데이터]

수학공부 할 때 x와 같은 느낌 

 

리턴값

[메소드가 실행하고 나서 호출 한 곳으로 돌려주는 값]

 

예를들어 10과 20을 주고 더하기 기능을 이용한다 했을 때, 10과 20이 더하기 메소드의 매개값, 리턴값은 30임

int result = Calculator.add(10,20);

-객체의 상호작용은 객체 간의 메소드 호출을 의미하며 매개값과 리턴값을 통해서 데이터를 주고 받는다. 


6.1.3_객체 간의 관계

  1. 집합관계 : 객체는 하나의 부품이고 하나는 완성품. (자동차-엔진,타이어,핸들)
  2. 사용관계 : 객체간의 상호작용, 객체는 다른 객체의 메소드를 호출하여 원하는 결과를 얻어낸다. (사람-자동차)
  3. 상속관계 : 상위(부모) 객체를 기반으로 하여 하위(자식) 객체를 생성하는 관계 (기계-자동차)

=> 객체 지향 프로그래밍은 만들고자 하는 완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계 한 후 조립하는 방식으로 프로그램을 개발하는 기법. 

 


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

1. 캡슐화, 2. 상속, 3. 다형성


1. 캡슐화

[객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것. ]

 

외부 객체는 객체 내부의 구조를 알지 못하여 객체가 노출해서 제공하는 필드와 메소드만 이용 할 수 있다. 

why? => 외부의 잘못된 사용으로 인해 객체가 손상되면 안됨. 사용자가 알 필요도 없고 함부로 만져서도 안되는 것들을 숨기는것. 

 

캡슐화된 멤버를 노출시킬 것인지, 숨길 것인지를 결정하기 위해 접근 제한자(Access Modifier)를 사용한다. 

접근제한자는 객체의 필드와 메소드의 사용 범위를 제한함으로써 외부로부터 보호하는 역할을 한다. 


2. 상속

상위객체 = 필드1 + 메소드1

하위객체 = 필드1 + 메소드1 + 필드2 + 메소드3

 

*장점

  1. 상위 객체를 재사용해서 하위 객체를 쉽고 빠르게 설계
  2. 상위 객체의 수정으로 모든 하위 객체들의 수정효과 => 유지보수 시간 절약

3. 다형성

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

 

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

객체는 부품화가 가능해진다. 

eg)자동차를 설계 할 때, 타이어 인터페이스 타입을 적용했다면 이 인터페이스를 구현한 실제 타이어들은 어떤것이든 상관없이 장착(대입)가능. 타이어타입에 한국타이어 객체와 금호 타이어 객체 둘 다 상속/구현 할 수 있음. 각 타이어의 성능은 다르게 나온다. 

 


 

 

'6. 클래스' 카테고리의 다른 글

6.5 클래스의 구성 멤버  (0) 2020.04.13
6.4 객체 생성  (0) 2020.04.13
6.3 클래스 선언  (0) 2020.04.13
6.2 객체와 클래스  (0) 2020.04.13