Transcript Document

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