5 장 . 객체지향 개념
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 PresentationTRANSCRIPT
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
이 장에서는 객체지향의 4 대 핵심 개념에 관해 학습한다 .
객체지향의 개요와 절차지향과의 차이점을 학습한다 .
클래스와 객체를 학습한다 . 객체의 생성과정을 예제를 통하여 학습한다 .
상속의 개념을 예제를 통하여 학습한다 .
캡슐화의 개념과 예를 학습한다 .
다형성의 개념을 학습한다 .
학습목표
2
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
5 장 . 객체지향 개념
1-1 객체지향 이론과 역사1 객체지향의 개요
4
객체지향 (Object-Oriented) 이론- 컴퓨터를 통하여 실세계와 같은 환경을 흉내 (simulation) 내기 위해 발전한 이론
실세계를 구성하는 사물의 속성과 기능
165 page
5 장 . 객체지향 개념
1-1 객체지향 이론과 역사1 객체지향의 개요
5
객체지향 언어의 역사
166 page
5 장 . 객체지향 개념
1-2 객체지향과 절치지향1 객체지향의 개요
6
절차지향 언어- 프로그램의 기본 단위는 절차 (procedure) 또는 함수 (fuction) 로 정의
객체지향 언어- 프로그램의 기본단위가 객체
- 객체는 “속성 + 기능”으로 구성
5 장 . 객체지향 개념
1-2 객체지향과 절차지향1 객체지향의 개요
7
절차지향과 객체지향
167 page
5 장 . 객체지향 개념
1-3 객체지향의 장점1 객체지향의 개요
8
객체지향의 장점- 문제를 쉽고 자연스럽게 프로그램화 ( 모델링 ) 할 수 있다 .
- 쉬운 프로그램의 개발로 인한 생산성을 향상시킬 수 있다 .
- 프로그램 모듈을 재사용할 수 있다 .
5 장 . 객체지향 개념
2 클래스와 객체
9
클래스- 하나의 클래스로부터 여러 개의 객체를 생성하기 위해 사용하는 형판
169 page
5 장 . 객체지향 개념
2-1 클래스와 객체의 구성2 클래스와 객체
10
객체- “ 속성 + 기능”으로 구성
- 객체를 생성하는 클래스 역시 “속성 + 기능”으로 구성
5 장 . 객체지향 개념
2-1 클래스와 객체의 구성2 클래스와 객체
11
실습예제- 다음은 성적의 평균을 구하는 클래스를 정의한 예이다 . 일반적으로 객체지향에서 속성은
필드 , 데이터 , 속성변수 , 객체 변수 등 다양한 용어를 사용하고 , 기능은 메소드(method) 라는 용어를 사용한다 .
170 page
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; }}
속성
기능
5 장 . 객체지향 개념
2-2 객체의 생성2 클래스와 객체
13
실체화 (instantiation)- 클래스로부터 객체를 생성하는 과정
- 인스턴스 (instance) 라 부름
실습예제- 위에서 작성된 평균을 구하는 클래스로부터 객체를 생성하는 예를 살펴보자 .
- 평균을 구하는 클래스로부터 객체를 생성
171 page
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 객체 생성
5 장 . 객체지향 개념
2-1 클래스와 객체의 구성2 클래스와 객체
15
프로그램 설명- 03 : student1 객체를 생성한다 .
- 04 : student2 객체를 생성한다 .
- 05~06 : 생성된 student1 과 student2 객체의 각 속성에 서로 다른 값을 저장한다 .
5 장 . 객체지향 개념
3 상속 (Inheritance)
16
상속- 기존 클래스로부터 모든 속성과 메소드를 상속
- 더 필요한 속성과 메소드를 추가하여 새로운 클래스를 생성
5 장 . 객체지향 개념
3 상속 (Inheritance)
17
실습예제- 앞 절에서 사용한 평균을 구하는 클래스에 총점을 구하는 방법이 추가된 클래스를 상속을
이용하여 작성해보자 .
173 page
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; }}
상위 클래스 정의
상위 클래스를 상속받아하위 클래스 정의
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 객체 생성
상속받은 속성값 설정
생성된 객체에서 정의된 메소드 호출
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 메소드를 호출한다 .
5 장 . 객체지향 개념
3 상속 (Inheritance)
21
클래스의 상속은 확장 (extend) 의 개념을 가짐- 상위 클래스의 모든 것을 상속받고 추가로 더 가지는 클래스를 구성하는 것
클래스의 계층 구조
175 page
5 장 . 객체지향 개념
3 상속 (Inheritance)
22
클래스 계층 구조에서의 상속
176 page
5 장 . 객체지향 개념
4 캡슐화 (Encapsulation)
23
캡슐화- 감기에 걸렸을 때 먹는 캡슐약과 같은 개념
- 캡슐 약에는 많은 성분이 포함되어 있지만 , 단순히 감기를 낫게 해 준다고 생각
177 page
5 장 . 객체지향 개념
4 캡슐화 (Encapsulation)
24
캡슐화를 통한 ‘정보의 은폐 (information hiding)’ 의 장점- 객체에 포함된 정보의 손상과 오용을 막을 수 있다 .
- 객체 내부의 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다 .
- 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지된다 .
- 처리된 결과만 사용하므로 객체의 이식성이 좋다 .
- 객체를 부품화 할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다 .
178 page
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; .................... }}
공개되는 속성공개되지 않는 속성
공개된 속성에 접근 . 오류 발생하지 않음공개되지 않은 속성에 접근 . 오류 발생
5 장 . 객체지향 개념
5 메시지 (Message)
26
메시지- 객체에 일을 시키는 행위
객체 사이의 메시지 전달
179 page
5 장 . 객체지향 개념
5 메시지 (Message)
27
상속된 구조에서의 메소드 탐색
180 page
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); ..................... }}
객체의 메소드호출 메시지
5 장 . 객체지향 개념
6 다형성 (Polymorphism)
29
다형성 (Polymorphism)- 객체지향의 중요한 개념 중에 하나
- 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능
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 개일 때 수행
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); }}
다른 객체 ,동일 메시지
객체지향의 개요 ① 객체지향은 실세계의 요소들을 “속성 + 기능”으로 표현한 것이다 .
② 자바는 객체지향 언어를 대표하는 성공한 언어이다 .
클래스와 객체 ① 클래스는 객체를 생성하는 형판 (template) 역할을 한다 .
② 하나의 클래스로부터 다수 개의 객체가 생성된다 .
③ 클래스는 “속성 + 기능”으로 구성된다 .
④ 클래스로부터 객체를 생성하는 과정을 실체화 (instantiation) 라고 하며 , 객체를 인스턴스라 부르기도 한다 .
⑤ 객체지향은 절차지향과는 달리 프로그램의 기본 단위가 객체 ( 속성 + 기능 ) 이다 .
학습정리
32
상속 ① 상속을 이용하여 비슷한 기능을 가진 클래스들을 계층구조 형태로 구성할 수 있다 .
② 상속은 상위 클래스의 모든 속성과 기능을 상속받고 , 추가로 더 가지는 확장(extend) 의 개념이다 .
③ 자바에서는 하나의 클래스만을 상위 클래스로 가질 수 있다 . 즉 다중상속을 허용하지 않는다 .
캡슐화 ① 캡슐화는 꼭 필요한 내용만 보여주고 , 불필요한 내용을 감춘다는 개념이다 .
② 클래스를 작성할 때는 꼭 필요한 내용만 공개해야 한다 .
③ 클래스를 작성할 때 캡슐화 개념을 적용하지 않으면 , 클래스가 잘못 사용될 수 있다
④ 캡슐화의 개념을 적용하여 정보 은폐 (Information hiding) 를 달성할 수 있다 .
학습정리
33
메시지 ① 생성된 객체들 사이의 상호관계를 정의한 것이 메시지이다 .
② 메시지를 통하여 객체에 일을 시킨다 .
③ 메시지는 객체 이름 , 메소드 이름 , 메소드 수행에 필요한 인자 (argument) 를 포함한다 .
다형성 ① 다형성은 다양한 변신을 의미하는 개념이다 .
② 다형성은 “서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능”을 의미한다 .
학습정리
34
5 장 . 객체지향 개념
35
수고하셨습니다 .질문 있습니까 ?