Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {

Similar presentations


Presentation on theme: "Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {"— Presentation transcript:

1 Java IT응용시스템공학과 김형진 교수 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 + "입니다"); } IT응용시스템공학과 김형진 교수

2 학습목표 이 장에서는 객체지향의 4대 핵심 개념에 관해 학습한다. 객체지향의 개요와 절차지향과의 차이점을 학습한다.
클래스와 객체를 학습한다. 객체의 생성과정을 예제를 통하여 학습한다. 상속의 개념을 예제를 통하여 학습한다. 캡슐화의 개념과 예를 학습한다. 다형성의 개념을 학습한다.

3 목차 section 1 객체지향의 개요 section 2 클래스와 객체 section 3 상속(Inheritance)
1-1 객체지향 이론과 역사 1-2 객체지향과 절치지향 1-3 객체지향의 장점 section 2 클래스와 객체 2-1 클래스와 객체의 구성 2-2 객체의 생성 section 3 상속(Inheritance) section 4 캡슐화 (Encapsulation) section 5 메시지(Message) section 6 다형성(Polymorphism)

4 1-1 객체지향 이론과 역사 객체지향(Object-Oriented)이론 실세계를 구성하는 사물의 속성과 기능
1 객체지향의 개요 1-1 객체지향 이론과 역사 객체지향(Object-Oriented)이론 컴퓨터를 통하여 실세계와 같은 환경을 흉내(simulation)내기 위해 발전한 이론 실세계를 구성하는 사물의 속성과 기능 165 page

5 1 객체지향의 개요 1-1 객체지향 이론과 역사 객체지향 언어의 역사 166 page

6 1-2 객체지향과 절치지향 객체지향의 배경 객체 소프트웨어 모듈의 재사용과 독립성을 강조
1 객체지향의 개요 1-2 객체지향과 절치지향 객체지향의 배경 소프트웨어 모듈의 재사용과 독립성을 강조 객체 효율적인 정보관리를 위하여 의미를 부여하고 분류하는 개념적인 단위 절차지향 언어 프로그램의 기본 단위는 절차(procedure) 또는 함수(fuction)로 정의 데이터 구조와 그 데이터를 변화 시키는 알고리즘으로 구성 객체지향 언어 프로그램의 기본단위가 객체 객체는 “속성+기능”으로 구성 객체들이 메시지(message)를 통하여 통신함으로써 원하는 결과를 얻는다. 각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드로 구성

7 1-2 객체지향과 절차지향 절차지향과 객체지향 공유 데이터 데이터 함수 절차지향 객체지향 1 객체지향의 개요 객체
절차지향 객체지향 메시지 객체 메소드 데이터 167 page

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

9 1-3 객체지향의 장점 객체지향의 장점 1 객체지향의 개요 문제를 쉽고 자연스럽게 프로그램화(모델링) 할 수 있다.
1-3 객체지향의 장점 객체지향의 장점 문제를 쉽고 자연스럽게 프로그램화(모델링) 할 수 있다. 쉬운 프로그램의 개발로 인한 생산성을 향상시킬 수 있다. 프로그램 모듈을 재사용할 수 있다.

10 학생1 = new 학생(이기쁨, 남자, 컴퓨터공학과, 2학년)
2 클래스와 객체 클래스(Class) 객체는 항상 클래스로부터 생성된다. 즉 클래스는 객체를 생성하는 형판(template) 클래스는 두개의 구성요소(member)인 자료구조(필드)와 연산(메소드)을 가진다 클래스로부터 생성된 객체를 instance라 한다. 객체 = instance 정보처리의 주체는 클래스가 아니라 객체이다 객체지향 프로그래밍의 시작은 클래스의 생성이다 클래스로부터 객체의 생성 예 학생1 = new 학생(이기쁨, 남자, 컴퓨터공학과, 2학년) 객체 객체생성 클래스 매개변수 이름 명령어 이름 데이터 169 page

11 클래스(Class) : 클래스로부터 객체의 생성
2 클래스와 객체 클래스(Class) : 클래스로부터 객체의 생성 클래스 학생 이름 성별 학과 학년 수강신청 시험보기 성적조회 클래스 이름 속성(자료구조) 학생1=new 학생(이기쁨,남자,….); 학생2=new 학생(신예진,여자,….); 학생3=new 학생(이정순,여자,….); 메소드(연산) 객체생성(instantiation) 객체이름 데이터 메소드 학생1 이기쁨 남자 컴퓨터공학과 2학년 수강신청 시험보기 성적조회 학생2 신예진 여자 경영학과 3학년 수강신청 시험보기 성적조회 학생3 이정순 여자 철학과 4학년 수강신청 시험보기 성적조회 인스턴스 (객체) 169 page

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

13 2-1 클래스와 객체의 구성 객체의 구성 객체 속성의 값을 나타내는 데이터(data)
2 클래스와 객체 2-1 클래스와 객체의 구성 객체 “속성+기능”으로 구성 객체를 생성하는 클래스 역시 “속성+기능”으로 구성 효율적으로 정보를 관리하기 위하여, 사람들이 의미를 부여하고 분류하는 논리적인(개념적인) 단위 실세계에 존재하는 하나의 단위에 대한 소프트웨어적 표현 객체의 구성 속성의 값을 나타내는 데이터(data) 데이터를 변경하거나 조작할 수 있는 메소드로 구성

14 객체의 예 2-1 클래스와 객체의 구성 객체는 프로그래머에 의해 모델링된다 메소드 데이터 아버지 객체 아들 객체
2 클래스와 객체 2-1 클래스와 객체의 구성 객체의 예 아버지 객체 아들 객체 과자를 먹는다 동화책 읽는다 TV를 본다 메소드 데이터 자동차, 돈, 술, 몽둥이, 신문, 담배 운전을 한다 돈으로 물건을 산다 몽둥이로 때린다 담배를 피운다 술을 마신다 신문을 장난감, 과자, 동화책, 게임기, 비디오, TV 장난감을 가지고 논다 비디오 를 본다 게임을 한다 객체는 프로그래머에 의해 모델링된다

15 2-1 클래스와 객체의 구성 실습예제 2 클래스와 객체
2-1 클래스와 객체의 구성 실습예제 다음은 성적의 평균을 구하는 클래스를 정의한 예이다. 일반적으로 객체지향에서 속성은 필드, 데이터, 속성변수, 객체 변수 등 다양한 용어를 사용하고, 기능은 메소드(method)라는 용어를 사용한다. 170 page

16 2-1 클래스와 객체의 구성 실습예제 2 클래스와 객체 자바로 작성된 클래스의 예 AvgTest.java 01 02 03 04
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; } 속성 기능

17 2-2 객체의 생성 실체화(instantiation) 실습예제 2 클래스와 객체 클래스로부터 객체를 생성하는 과정
2-2 객체의 생성 실체화(instantiation) 클래스로부터 객체를 생성하는 과정 인스턴스(instance)라 부름 실습예제 위에서 작성된 평균을 구하는 클래스로부터 객체를 생성하는 예를 살펴보자. 평균을 구하는 클래스로부터 객체를 생성 171 page

18 2-1 클래스와 객체의 구성 실습예제 2 클래스와 객체 AvgTest.java 01 02 03 04 05 06 07 08 09
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) { 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 객체 생성 생성된 객체의 속성에 서로 다른 값을 저장

19 2-1 클래스와 객체의 구성 프로그램 설명 2 클래스와 객체 03 : student1 객체를 생성한다.
2-1 클래스와 객체의 구성 프로그램 설명 03 : student1 객체를 생성한다. 04 : student2 객체를 생성한다. 05~06 : 생성된 student1과 student2 객체의 각 속성에 서로 다른 값을 저장한다.

20 상속 3 상속(Inheritance) 기존 클래스로부터 모든 속성과 메소드를 상속
더 필요한 속성과 메소드를 추가하여 새로운 클래스를 생성 상속관계의 클래스들은 계층구조를 구성할 수 있다 하위 계층의 클래스는 상위 계층의 모든 요소를 상속 받고 추가적으로 필요로 되는 새로운 자료구조와 메소드를 더 가진다 하위 클래스는 상위 클래스를 확장한 개념 상속의 개념을 이용하여 소프트웨어의 재사용(reusing)을 지원

21 클래스의 상속 상속 (inheritance) 추가된 속성과 메소드 3 상속(Inheritance) 클래스 이름 속성(자료구조)
학생-high 이름 성별 학과 학년 수강신청 시험보기 성적조회 클래스 이름 속성(자료구조) 메소드(연산) 학생-low 컨닝횟수 컨닝하기 추가된 속성과 메소드 상속 (inheritance)

22 3 상속(Inheritance) 실습예제 앞 절에서 사용한 평균을 구하는 클래스에 총점을 구하는 방법이 추가된 클래스를 상속을 이용하여 작성해보자. 173 page

23 실습예제 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; 상위 클래스 정의 상위 클래스를 상속받아 하위 클래스 정의

24 실습예제 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 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 객체 생성 상속받은 속성값 설정 생성된 객체에서 정의된 메소드 호출

25 프로그램 설명 3 상속(Inheritance) 1~0 : Avg1 클래스를 정의한다.
10~16 : Avg1 클래스를 상속받아 Avg1Total 클래스를 정의한다. : Avg1Total 클래스에 total 메소드를 추가한다. 19~20 : Avg1 클래스를 상속받은 Avg1Total 클래스로부터 객체를 생성한다. 21~22 : Avg1으로부터 상속받은 name 속성의 값을 설정한다. 25~26 : Avg1Total 클래스에서 새로 정의한 total 메소드를 호출한다.

26 클래스의 상속은 확장(extend)의 개념을 가짐
3 상속(Inheritance) 클래스의 상속은 확장(extend)의 개념을 가짐 상위 클래스의 모든 것을 상속받고 추가로 더 가지는 클래스를 구성하는 것 클래스의 계층 구조 175 page

27 3 상속(Inheritance) 클래스 계층 구조에서의 상속 176 page

28 객체를 캡슐화 하여 What만 보여주고 How는 감춘다.
4 캡슐화(Encapsulation) 캡슐화 감기에 걸렸을 때 먹는 캡슐약과 같은 개념 캡슐 약에는 많은 성분이 포함되어 있지만, 단순히 감기를 낫게 해 준다고 생각 객체를 캡슐화 하여 What만 보여주고 How는 감춘다. 객체를 작성할 때 숨겨야 하는 정보(private)와 공개해야 하는 정보(public)를 구분하여 작성 객체의 사용자는 기능만 알고 사용하며 어떻게 처리되는지는 은폐된다(Information Hiding) 177 page

29 캡슐화를 통한 ‘정보의 은폐(information hiding)’의 장점
4 캡슐화(Encapsulation) 캡슐화를 통한 ‘정보의 은폐(information hiding)’의 장점 객체에 포함된 정보의 손상과 오용을 막을 수 있다. 객체 내부의 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다. 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지된다. 처리된 결과만 사용하므로 객체의 이식성이 좋다. 객체를 부품화 할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다. 178 page

30 실습예제 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; 공개되는 속성 공개되지 않는 속성 공개된 속성에 접근. 오류 발생하지 않음 공개되지 않은 속성에 접근. 오류 발생

31 송신객체가 실행을 원하는 수신객체의 메소드 이름 실행을 원하는 메소드에 전달할 매개변수
5 메시지(Message) 메시지 객체에 일을 시키는 행위 메시지는 세가지 요소로 구성된다 메시지를 받을 객체의 이름(주소) 송신객체가 실행을 원하는 수신객체의 메소드 이름 실행을 원하는 메소드에 전달할 매개변수 179 page

32 5 메시지(Message) 상속된 구조에서의 메소드 탐색 180 page

33 실습예제 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); } 객체의 메소드 호출 메시지

34 다형성(Polymorphism) 모형 draw() 타원 삼각형 사각형 { 타원을 { 삼각형을 { 사각형을 그린다 }
객체지향의 중요한 개념 중에 하나 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능 하나의 인터페이스를 사용하여 다양한 구현 방법을 제공 모형 draw() 타원 { 타원을 그린다 } 사각형 { 사각형을 삼각형 { 삼각형을

35 실습예제 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) { 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개일 때 수행

36 실습예제 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); } 다른 객체, 동일 메시지

37 학습정리 객체지향의 개요 클래스와 객체 객체지향은 실세계의 요소들을 “속성+기능”으로 표현한 것이다.
자바는 객체지향 언어를 대표하는 성공한 언어이다. 클래스와 객체 클래스는 객체를 생성하는 형판(template) 역할을 한다. 하나의 클래스로부터 다수 개의 객체가 생성된다. 클래스는 “속성+기능”으로 구성된다. 클래스로부터 객체를 생성하는 과정을 실체화(instantiation)라고 하며, 객체를 인스턴스라 부르기도 한다. 객체지향은 절차지향과는 달리 프로그램의 기본 단위가 객체(속성+기능)이다.

38 학습정리 상속 캡슐화 상속을 이용하여 비슷한 기능을 가진 클래스들을 계층구조 형태로 구성할 수 있다.
상속은 상위 클래스의 모든 속성과 기능을 상속받고, 추가로 더 가지는 확장(extend)의 개념이다. 자바에서는 하나의 클래스만을 상위 클래스로 가질 수 있다. 즉 다중상속을 허용하지 않는다. 캡슐화 캡슐화는 꼭 필요한 내용만 보여주고, 불필요한 내용을 감춘다는 개념이다. 클래스를 작성할 때는 꼭 필요한 내용만 공개해야 한다. 클래스를 작성할 때 캡슐화 개념을 적용하지 않으면, 클래스가 잘못 사용될 수 있다 캡슐화의 개념을 적용하여 정보 은폐(Information hiding)를 달성할 수 있다.

39 학습정리 메시지 다형성 생성된 객체들 사이의 상호관계를 정의한 것이 메시지이다. 메시지를 통하여 객체에 일을 시킨다.
메시지는 객체 이름, 메소드 이름, 메소드 수행에 필요한 인자(argument)를 포함한다. 다형성 다형성은 다양한 변신을 의미하는 개념이다. 다형성은 “서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능”을 의미한다.

40 5장. 객체지향 개념 수고하셨습니다.


Download ppt "Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {"

Similar presentations


Ads by Google