객체 지향(Object Oriented)

Download Report

Transcript 객체 지향(Object Oriented)

3. 객체지향의 개념
3.1 객체지향(object-oriented)과
절차지향(procedural-oriented)
3.2 객체(object)
3.3 클래스(class)
3.4 상속(inheritance)
3.5 캡슐화(encapsulation)
3.6 메시지(message)
3.7 다형성(polymorphism)
3.8 객체지향의 개념과 자바 프로그램
KUMHO SOFTWARE DEVELOPMENT
1
3.1 객체지향과 절차지향
객체지향의 배경
–
소프트웨어 모듈의 재사용과 독립성을 강조
–
효율적인 정보 관리를 위하여 의미를 부여하고 분류하는 개념적인 단위
객체
객체 지향(Object-Oriented) 대 절차지향(Procedural-Oriented)
–
절차지향 : 데이터 구조와 그 데이터를 변화 시키는 알고리즘으로 구성
객체지향 : 객체들이 메시지(message)를 통하여 통신함으로써 원하는 결과를 얻는다.
각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드로 구성
KUMHO SOFTWARE DEVELOPMENT
2
3.1 객체지향과 절차지향
객체지향 대 절차지향
함수
함수
함수
메소드 메
소
드
데이터
메시지
메소드
메소드
공유 데이터
데이터
메
소
드
메시지
메시지
메소드 메
소
드
데이터
메소드
객체
함수
객체
메시지
메소드
절차지향
KUMHO SOFTWARE DEVELOPMENT
객체
객체지향
3
3.2 객체(Object)
객체
–
효율적으로 정보를 관리하기 위하여, 사람들이 의미를 부여하고 분류하는 논리적인(개념적인)
단위
–
실세계에 존재하는 하나의 단위에 대한 소프트웨어적 표현
객체의 구성
–
속성의 값을 나타내는 데이터(data)
–
데이터를 변경하거나 조작할 수 있는 메소드로 구성
KUMHO SOFTWARE DEVELOPMENT
4
3.2 객체(Object)
객체의 예
객체는 프로그래머에 의해 모델링된다.
메소드
데이터
장난감을 가지고
논다
운전을 한다
술을
마신다
자동차, 돈,
술, 몽둥이, 신문,
담배
담배를
피운다
돈으로
물건을
산다
과자를
먹는다
신문을
읽는다
동화책
을
읽는다
몽둥이로 때린다
아버지 객체
KUMHO SOFTWARE DEVELOPMENT
장난감,
과자, 동화책,
게임기, 비디오,
TV
비디오
를 본다
게임을
한다
TV를 본다
아들 객체
5
3.3 클래스(Class)
객체는 항상 클래스로부터 생성된다.
즉 클래스는 객체를 생성하는 형판(template)
클래스는 두 개의 구성 요소(member)인 자료 구조(필드)와 연산(메소드)을 가진다.
클래스로부터 생성된 객체를 instance라 한다.
객체 = instance
정보처리의 주체는 클래스가 아니라 객체이다.
객체지향 프로그래밍의 시작은 클래스의 생성이다.
클래스로부터 객체의 생성 예
학생1 = new 학생(이기쁨, 남자, 컴퓨터공학과, 2학년)
객체
이름
객체 생성
명령어
클래스
이름
KUMHO SOFTWARE DEVELOPMENT
매개변수
데이터
6
3.3 클래스(Class)
클래스 - 클래스로부터 객체의 생성
클래스
학생
학생1=new 학생(이기쁨,남자,….);
학생2=new 학생(신예진,여자,….);
학생3=new 학생(이정순,여자,….);
이름
성별
학과
학년
수강신청
시험보기
성적조회
클래스 이름
속성(자료구조)
메소드(연산)
객체생성(instantiation)
학생1
학생2
이기쁨
남자
컴퓨터공학과
2학년
신예진
여자
경영학과
3학년
인스턴스
(객체)
수강신청
시험보기
성적조회
KUMHO SOFTWARE DEVELOPMENT
수강신청
시험보기
성적조회
객체이름
학생3
데이터
이정순
여자
철학과
4학년
메소드
수강신청
시험보기
성적조회
7
3.4 상속(inheritance)
상속 관계의 클래스들은 계층 구조를 구성할 수 있다.
하위 계층의 클래스는 상위 계층의 모든 요소를 상속받고 추가적으로 필요로 되는 새로운 자료 구조와 메소드를
더 가진다.
하위 클래스는 상위 클래스를 확장한 개념
상속의 개념을 이용하여 소프트웨어의 재사용(reusing)을 지원
KUMHO SOFTWARE DEVELOPMENT
8
3.4 상속(inheritance)
클래스의 상속
클래스 이름
학생-high
이름
성별
학과
학년
수강신청
시험보기
성적조회
속성(자료 구조)
메소드(연산)
학생-low
상속
(inheritance)
이름
성별
학과
학년
컨닝회수
수강신청
시험보기
성적조회
컨닝하기
KUMHO SOFTWARE DEVELOPMENT
추가된 속성과
메소드
9
3.4 상속(inheritance)
클래스의 계층 구조
새로운 클래스를 생성할 때 기존 클래스의 하위 클래스로 선언할 수 있다.
새로운 클래스에 속성이나 메소드를 추가하여 기존 클래스를 확장할 수 있다.
클래스는 계층구조를 이룬다.
생물
식물
동물
새
사람
포유류
사자
물고기
일반화
- 공통 속성 가짐
- 속성이 간단
양서류
코끼리
특수화
- 상위속성 상속
- 개별속성 추가
- 속성이 많다.
클래스의 계층 구조
KUMHO SOFTWARE DEVELOPMENT
10
3.4 상속(inheritance)
클래스 계층 구조에서의 상속 관계
: 새로 정의하여 추가한 속성
생물
=
: 상속하여 재사용하는 속성
호흡함
: 상속 경로
동물
=
호흡함
+
걸어
다님
포유류
=
호흡함
+
걸어
다님
+
젖으로
양육함
사람
=
호흡함
+
걸어
다님
+
젖으로
양육함
+
웃음
속성을 상속하여 새로운 클래스를 생성
KUMHO SOFTWARE DEVELOPMENT
11
3.4 상속(inheritance)
상속의 예
person
student
faculity
상위(super) 클래스
staff
하위(sub) 클래스
undergrad
graduate
KUMHO SOFTWARE DEVELOPMENT
12
3.5 캡슐화(encapsulation)
객체를 캡슐화하여 What만 보여 주고 How는 감춘다.
객체를 작성할 때 숨겨야 하는 정보(private)와 공개해야 하는 정보(public)를 구분하여 작성
객체의 사용자는 기능만 알고 사용하며 어떻게 처리되는지는 은폐된다.
(Information Hiding)
공개된
인터페이스
public
객체
숨겨진 데이터와
메소드들
객체의 사용자들은 공개된
인터페이스를 통해서만
객체에 접근할 수 있다.
public
public
public
KUMHO SOFTWARE DEVELOPMENT
13
3.5 캡슐화(encapsulation)
캡슐화의 장점
객체에 포함된 정보의 손상과 오용을 막을 수 있다.
객체 조작 방법이 바뀌어도 사용 방법은 바뀌지 않는다.
데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지된다.
처리된 결과만 사용하므로 객체의 이식성이 좋다.
객체를 부품화할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다.
KUMHO SOFTWARE DEVELOPMENT
14
3.6 메시지(message)
객체에게 일을 시키는 행위
메시지는 세 가지 요소로 구성된다
 메시지를 받을 객체의 이름(주소)
 송신 객체가 실행을 원하는 수신 객체의 메소드 이름
 실행을 원하는 메소드에 전달할 매개변수
수신 객체
객체이름.메소드(매개변수)
KUMHO SOFTWARE DEVELOPMENT
송신 객체
15
3.6 메시지(message)
메시지의 예
자료 구조
int xPosition;
int yPosition;
boolean status;
Color color;
void
void
void
void
move(int x, int y);
setColor(Color c);
penUp();
penDown();
클래스 P의 구조
KUMHO SOFTWARE DEVELOPMENT
Point 객체의 메소드 호출
public class Point1 {
P point;
public static void main(String args[])
{
point = new P(); // 객체의 생성
point.move(10,10); // 메시지 사용
point.setColor(blue);
point.penUp();
point.penDown();
}
}
16
3.6 메시지(message)
클래스 계층 구조에서의 메시지 처리
 계속하여 상위
클래스를 탐색
상속
 상위 클래스에서
메소드 탐색
메소드1
메소드
2
자료
구조
메소드
4
자료
구조
상속
메소드3
메소드
5
메소드
6
 소속 클래스에서
메소드 탐색
 메시지 도착
객체 고유
데이터
객체 고유
데이터
객체1
객체2
(객체들은 자신이 가지는 고유의 데이터만 가지고 생성되며
메소드는 클래스에 있는 것을 공유 한다)
KUMHO SOFTWARE DEVELOPMENT
17
3.7 다형성(Polymorphism)
“one interface, multiple implementation”
하나의 인터페이스를 사용하여 다양한 구현 방법을 제공
Polymorphism = 다양한(poly) + 변신(morphism)
KUMHO SOFTWARE DEVELOPMENT
18
3.7 다형성(Polymorphism)
다형성(Polymorphism)
A
A1
A2
A superobject = new A1();
A3
(O)
상위클래스 타입의 객체 변수에
하위 클래스에서 생성된 객체를 할당
A1 superobject = new A();
(X)
하위클래스 타입의 객체 변수에
상위 클래스에서 생성된 객체를 할당 불가
KUMHO SOFTWARE DEVELOPMENT
19
3.7 다형성(Polymorphism)
다형성(Polymorphism)
모형
draw()
타원
draw()
{ 타원을
시각형
draw()
삼각형
draw()
{ 사각형을
{ 삼각형을
그린다 }
그린다 }
그린다 }
KUMHO SOFTWARE DEVELOPMENT
20
3.7 다형성(Polymorphism)
다형성(Polymorphism)
모형 A ; // 상위 클래스 타입의 객체 변수 A 선언
A = new 타원();
// 상위 클래스 타입의 객체 변수 A에 타원 클래스의 객체를 생성하여 할당
A.draw();
// 타원 클래스에 기술된 draw() 메소드를 수행하여 선언된 타원을 그린다 .
A = new 사각형();
// 상위 클래스 타입의 객체 변수 A에 사각형 클래스의 객체를 생성하여 할당
A.draw();
// 사각형 클래스에 기술된 draw() 메소드를 수행하여 선언된 타원을 그린다.
…………………
모형에서 선언된 draw() 메소드는 할당되는 하위 클래스의 객체에 따라 다양한
변신을 시도하여 서로 다른 결과를 나타낸다.
메시지에서 요구한 메소드(draw())의 매핑을 동적으로(실행시간) 수행
KUMHO SOFTWARE DEVELOPMENT
21
3.8 객체지향의 개념과 자바 프로그램
클래스 내부
에서만 사용
하는 은폐된
변수
class A {
private int result1;
public int add(int x,int y) {
result1 = x + y;
return result1;
}
public int subtraction(int x,int y) {
result1 = x - y;
return result1;
}
}
class B extends A {
private int result2;
public int multi(int x,int y) {
result2 = x * y;
return result2;
}
public int divide(int x,int y) {
result2 = x / y;
return result2;
}
}
KUMHO SOFTWARE DEVELOPMENT
클래스 생성
메소드 생성
클래스 A로부터
상속받아 클래스
B 생성
클래스 B는 A로부터
상속되었으므로
A의 메소드를
사용할 수 있다.
22
3.8 객체지향의 개념과 자바 프로그램
클래스로부터
객체의 생성
class TestAB
public static void main(String args[]) {
int temp;
A objecta = new A();
B objectb = new B();
temp = objecta.add(10,20);
System.out.println( A의 add 수행결과 + temp);
temp = objectb.add(1,2);
System.out.println( B의 add 수행결과 + temp);
temp = objectb.multi(2,2);
System.out.println( B의 multi 수행결과 + temp);
temp = objecta.multi(20,20);
System.out.println( A의 multi 수행결과 + temp);
}
}
KUMHO SOFTWARE DEVELOPMENT
객체에게 메시지를 보낸다.
objectb 객체는
메소드 add()를
가지고 있지
않으므로 상위
클래스를 탐색
하여 add()
메소드를
수행
objecta 객체는 multi() 메소드를 가지고 있지
않으므로 에러를 발생
23
3.8 객체지향의 개념과 자바 프로그램
객체지향 프로그래밍(OOP) 언어
1960
LISP
ALGOL
SIMULA
1970
Smalltalk
C
Pascal
Flavors
Loops
Objective-C
Eiffel
1980
C++
Object Pascal
CLOS
Actor
JAVA
1990
전통언어
객체지향
전통 및 객체지향
KUMHO SOFTWARE DEVELOPMENT
객체지향 프로그래밍
언어들의 계보
24