5 장 . 객체지향 개념

35
5 장 . 장장장장 장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

Upload: errol

Post on 05-Jan-2016

72 views

Category:

Documents


0 download

DESCRIPTION

5 장 . 객체지향 개념. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } }. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 5 장 .  객체지향 개념

이 장에서는 객체지향의 4 대 핵심 개념에 관해 학습한다 .

객체지향의 개요와 절차지향과의 차이점을 학습한다 .

클래스와 객체를 학습한다 . 객체의 생성과정을 예제를 통하여 학습한다 .

상속의 개념을 예제를 통하여 학습한다 .

캡슐화의 개념과 예를 학습한다 .

다형성의 개념을 학습한다 .

학습목표

2

Page 3: 5 장 .  객체지향 개념

section 1 객체지향의 개요 - 1-1 객체지향 이론과 역사

- 1-2 객체지향과 절치지향

- 1-3 객체지향의 장점

section 2 클래스와 객체 - 2-1 클래스와 객체의 구성

- 2-2 객체의 생성

section 3 상속 (Inheritance)

section 4 캡슐화 (Encapsulation)

section 5 메시지 (Message)

section 6 다형성 (Polymorphism)

목차

3

Page 4: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1-1 객체지향 이론과 역사1 객체지향의 개요

4

객체지향 (Object-Oriented) 이론- 컴퓨터를 통하여 실세계와 같은 환경을 흉내 (simulation) 내기 위해 발전한 이론

실세계를 구성하는 사물의 속성과 기능

165 page

Page 5: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1-1 객체지향 이론과 역사1 객체지향의 개요

5

객체지향 언어의 역사

166 page

Page 6: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1-2 객체지향과 절치지향1 객체지향의 개요

6

절차지향 언어- 프로그램의 기본 단위는 절차 (procedure) 또는 함수 (fuction) 로 정의

객체지향 언어- 프로그램의 기본단위가 객체

- 객체는 “속성 + 기능”으로 구성

Page 7: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1-2 객체지향과 절차지향1 객체지향의 개요

7

절차지향과 객체지향

167 page

Page 8: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

1-3 객체지향의 장점1 객체지향의 개요

8

객체지향의 장점- 문제를 쉽고 자연스럽게 프로그램화 ( 모델링 ) 할 수 있다 .

- 쉬운 프로그램의 개발로 인한 생산성을 향상시킬 수 있다 .

- 프로그램 모듈을 재사용할 수 있다 .

Page 9: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2 클래스와 객체

9

클래스- 하나의 클래스로부터 여러 개의 객체를 생성하기 위해 사용하는 형판

169 page

Page 10: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-1 클래스와 객체의 구성2 클래스와 객체

10

객체- “ 속성 + 기능”으로 구성

- 객체를 생성하는 클래스 역시 “속성 + 기능”으로 구성

Page 11: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-1 클래스와 객체의 구성2 클래스와 객체

11

실습예제- 다음은 성적의 평균을 구하는 클래스를 정의한 예이다 . 일반적으로 객체지향에서 속성은

필드 , 데이터 , 속성변수 , 객체 변수 등 다양한 용어를 사용하고 , 기능은 메소드(method) 라는 용어를 사용한다 .

170 page

Page 12: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-1 클래스와 객체의 구성2 클래스와 객체

12

실습예제

자바로 작성된 클래스의 예 AvgTest.java

010203040506070809

class Avg { String name; int avg; public String average(int kor, int eng) { avg = (kor+eng)/2; return name+avg; }}

속성

기능

Page 13: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-2 객체의 생성2 클래스와 객체

13

실체화 (instantiation)- 클래스로부터 객체를 생성하는 과정

- 인스턴스 (instance) 라 부름

실습예제- 위에서 작성된 평균을 구하는 클래스로부터 객체를 생성하는 예를 살펴보자 .

- 평균을 구하는 클래스로부터 객체를 생성

171 page

Page 14: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-1 클래스와 객체의 구성2 클래스와 객체

14

실습예제

AvgTest.java

01020304050607080910111213

public class AvgTest { public static void main(String[] args) { Avg student1 = new Avg(); Avg student2 = new Avg();

student1.name = " 김철수 ";

student2.name = " 김영희 ";

String st1_avg = student1.average(70,80); String st2_avg = student2.average(80,90); System.out.println(st1_avg); System.out.println(st2_avg); } }

student1 객체 생성

생성된 객체의 속성에서로 다른 값을 저장

student2 객체 생성

Page 15: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

2-1 클래스와 객체의 구성2 클래스와 객체

15

프로그램 설명- 03 : student1 객체를 생성한다 .

- 04 : student2 객체를 생성한다 .

- 05~06 : 생성된 student1 과 student2 객체의 각 속성에 서로 다른 값을 저장한다 .

Page 16: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

16

상속- 기존 클래스로부터 모든 속성과 메소드를 상속

- 더 필요한 속성과 메소드를 추가하여 새로운 클래스를 생성

Page 17: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

17

실습예제- 앞 절에서 사용한 평균을 구하는 클래스에 총점을 구하는 방법이 추가된 클래스를 상속을

이용하여 작성해보자 .

173 page

Page 18: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

18

실습예제

AvgTest1.java

01020304050607080910111213141516

class Avg1 { String name; int avg; public String average(int kor, int eng) { avg = (kor+eng)/2; return name+avg; }} class Avg1Total extends Avg1 { public int total(int kor, int eng) { int score = kor + eng; return score; }}

상위 클래스 정의

상위 클래스를 상속받아하위 클래스 정의

Page 19: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

19

실습예제

AvgTest1.java

1718192021222324252627282930

public class AvgTest1 { public static void main(String[] args) { Avg1Total student1 = new Avg1Total(); Avg1Total student2 = new Avg1Total();

student1.name = " 김철수 ";

student2.name = " 김영희 ";

String st1_avg = student1.average(70,80); String st2_avg = student2.average(80,90); int st1_total = student1.total(70,80); int st2_total = student2.total(80,90);

System.out.println(st1_avg+" 총점 =" + st1_total);

System.out.println(st2_avg+" 총점 =" + st2_total);

}}

Avg1Total 객체 생성

상속받은 속성값 설정

생성된 객체에서 정의된 메소드 호출

Page 20: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

20

프로그램 설명- 1~0 : Avg1 클래스를 정의한다 .

- 10~16 : Avg1 클래스를 상속받아 Avg1Total 클래스를 정의한다 .

- 11-15 : Avg1Total 클래스에 total 메소드를 추가한다 .

- 19~20 : Avg1 클래스를 상속받은 Avg1Total 클래스로부터 객체를 생성한다 .

- 21~22 : Avg1 으로부터 상속받은 name 속성의 값을 설정한다 .

- 25~26 : Avg1Total 클래스에서 새로 정의한 total 메소드를 호출한다 .

Page 21: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

21

클래스의 상속은 확장 (extend) 의 개념을 가짐- 상위 클래스의 모든 것을 상속받고 추가로 더 가지는 클래스를 구성하는 것

클래스의 계층 구조

175 page

Page 22: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

3 상속 (Inheritance)

22

클래스 계층 구조에서의 상속

176 page

Page 23: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

4 캡슐화 (Encapsulation)

23

캡슐화- 감기에 걸렸을 때 먹는 캡슐약과 같은 개념

- 캡슐 약에는 많은 성분이 포함되어 있지만 , 단순히 감기를 낫게 해 준다고 생각

177 page

Page 24: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

4 캡슐화 (Encapsulation)

24

캡슐화를 통한 ‘정보의 은폐 (information hiding)’ 의 장점- 객체에 포함된 정보의 손상과 오용을 막을 수 있다 .

- 객체 내부의 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다 .

- 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지된다 .

- 처리된 결과만 사용하므로 객체의 이식성이 좋다 .

- 객체를 부품화 할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다 .

178 page

Page 25: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

4 캡슐화 (Encapsulation)

25

실습예제AvgTest2.java

010203040506070809101112131415161718

class Avg2 { public String name; private int avg; public String average(int kor, int eng) { avg = (kor+eng)/2; return name+avg; }} public class AvgTest2 { public static void main(String[] args) { Avg2 student1 = new Avg2(); ....................

student1.name = " 김철수 ";

student1.avg = 100; .................... }}

공개되는 속성공개되지 않는 속성

공개된 속성에 접근 . 오류 발생하지 않음공개되지 않은 속성에 접근 . 오류 발생

Page 26: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

5 메시지 (Message)

26

메시지- 객체에 일을 시키는 행위

객체 사이의 메시지 전달

179 page

Page 27: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

5 메시지 (Message)

27

상속된 구조에서의 메소드 탐색

180 page

Page 28: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

5 메시지 (Message)

28

실습예제

AvgTest1.java

010203040506070809101112

public class AvgTest1 { public static void main(String[] args) { Avg1Total student1 = new Avg1Total(); Avg1Total student2 = new Avg1Total(); ..................... String st1_avg = student1.average(70,80); String st2_avg = student2.average(80,90); int st1_total = student1.total(70,80); int st2_total = student2.total(80,90); ..................... }}

객체의 메소드호출 메시지

Page 29: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

6 다형성 (Polymorphism)

29

다형성 (Polymorphism)- 객체지향의 중요한 개념 중에 하나

- 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능

Page 30: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

6 다형성 (Polymorphism)

30

실습예제

AvgTest3.java

0102030405060708091011121314

class Avg3 { public String name; private int avg; public String average(int kor, int eng) { avg = (kor+eng)/2;

return name+" 두 과목 평균 : "+avg;

} public String average(int kor, int eng, int mat) { avg = (kor+eng+mat)/3;

return name+" 세 과목 평균 : "+avg;

}}

매개변수가 2 개일 때 수행

같은 이름을 가진 메소드 선언( 메소드 오버로딩 )

같은 이름을 가진 메소드 선언( 메소드 오버로딩 )

매개변수가3 개일 때 수행

Page 31: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

6 다형성 (Polymorphism)

31

실습예제AvgTest3.java

151617181920212223242526

public class AvgTest3 { public static void main(String[] args) { Avg3 student1 = new Avg3(); Avg3 student2 = new Avg3();

student1.name = " 김철수 ";

student2.name = " 김영희 ";

String st1_avg = student1.average(70,80); String st2_avg = student2.average(80,90,100); System.out.println(st1_avg); System.out.println(st2_avg); }}

다른 객체 ,동일 메시지

Page 32: 5 장 .  객체지향 개념

객체지향의 개요 ① 객체지향은 실세계의 요소들을 “속성 + 기능”으로 표현한 것이다 .

② 자바는 객체지향 언어를 대표하는 성공한 언어이다 .

클래스와 객체 ① 클래스는 객체를 생성하는 형판 (template) 역할을 한다 .

② 하나의 클래스로부터 다수 개의 객체가 생성된다 .

③ 클래스는 “속성 + 기능”으로 구성된다 .

④ 클래스로부터 객체를 생성하는 과정을 실체화 (instantiation) 라고 하며 , 객체를 인스턴스라 부르기도 한다 .

⑤ 객체지향은 절차지향과는 달리 프로그램의 기본 단위가 객체 ( 속성 + 기능 ) 이다 .

학습정리

32

Page 33: 5 장 .  객체지향 개념

상속 ① 상속을 이용하여 비슷한 기능을 가진 클래스들을 계층구조 형태로 구성할 수 있다 .

② 상속은 상위 클래스의 모든 속성과 기능을 상속받고 , 추가로 더 가지는 확장(extend) 의 개념이다 .

③ 자바에서는 하나의 클래스만을 상위 클래스로 가질 수 있다 . 즉 다중상속을 허용하지 않는다 .

캡슐화 ① 캡슐화는 꼭 필요한 내용만 보여주고 , 불필요한 내용을 감춘다는 개념이다 .

② 클래스를 작성할 때는 꼭 필요한 내용만 공개해야 한다 .

③ 클래스를 작성할 때 캡슐화 개념을 적용하지 않으면 , 클래스가 잘못 사용될 수 있다

④ 캡슐화의 개념을 적용하여 정보 은폐 (Information hiding) 를 달성할 수 있다 .

학습정리

33

Page 34: 5 장 .  객체지향 개념

메시지 ① 생성된 객체들 사이의 상호관계를 정의한 것이 메시지이다 .

② 메시지를 통하여 객체에 일을 시킨다 .

③ 메시지는 객체 이름 , 메소드 이름 , 메소드 수행에 필요한 인자 (argument) 를 포함한다 .

다형성 ① 다형성은 다양한 변신을 의미하는 개념이다 .

② 다형성은 “서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능”을 의미한다 .

학습정리

34

Page 35: 5 장 .  객체지향 개념

5 장 . 객체지향 개념

35

수고하셨습니다 .질문 있습니까 ?