객체지향 소프트웨어공학 2 장 객체 지향. 2.1 객체지향  절차적 패러다임 소프트웨어가 프로시저 단위로 구성됨  프로시저 추상 – 단순한 데이터에는 적합하나 복잡한 데이터를 가진 응 용문제에는 부적합  데이터 추상 – 특정한 의미를 이루는 데이터의 조각들을 모아.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
컴퓨터와 인터넷.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
소프트웨어 소프트웨어 엔지니어링 작업의 결과 프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 정보 일체
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Entity Relationship Diagram
제 2 장 객체지향의 이해.
제 4 장 관계 학기 소프트웨어설계.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
자바 5.0 프로그래밍.
CHAP 12. 리소스와 보안.
C#.
[INA470] Java Programming Youn-Hee Han
7장 인터페이스와 추상 클래스.
Method & library.
프로그래밍 개요
자바응용.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 5 장 집합연관, 복합연관, 인터페이스, 실체화 (교재: J. Schmuller 저/곽용재 역, 초보자를 위한 UML 객체지향설계, 제3판, 정보문화사, 2006) 학기 소프트웨어설계.
2장. 변수와 타입.
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바 5.0 프로그래밍.
Power Java 제11장 상속.
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Numerical Analysis Programming using NRs
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
07. DB 설계 명지대학교 ICT 융합대학 김정호.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
 6장. SQL 쿼리.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
6 객체.
Presentation transcript:

객체지향 소프트웨어공학 2 장 객체 지향

2.1 객체지향  절차적 패러다임 소프트웨어가 프로시저 단위로 구성됨  프로시저 추상 – 단순한 데이터에는 적합하나 복잡한 데이터를 가진 응 용문제에는 부적합  데이터 추상 – 특정한 의미를 이루는 데이터의 조각들을 모아 그루핑 – 시스템의 복잡도를 줄이는데 도움  예 ) 레코드나 구조체  객체지향 패러다임 프로시저 추상을 데이터 추상 관점으로 구성

객체지향 패러다임 문제를 해결하기 위한 모든 계산이 객체 (object) 라는 것을 기본으로 수행되는 방법  객체는 클래스의 인스턴스. 클래스는 자료가 추상화된 것이며, 동시에 객체를 조작하는 프로시저에 대한 추상  실행 프로그램은 특정 작업을 수행하기 위하여 모인 객체의 집합

구조 비교 객체지향 패러다임 절차적 패러다임 프로시저가 계층적 구조 각 프로시저는 여러가지 다른 타입의 데이터 구조를 처리 최고층이 존재하며 각 프로시저들이 계층의 프로시저들을 호출하고 실행제어 클래스의 모임 클래스는 클래스의 인스턴스 ( 객체의 값을 조작할 수 있는 함수들이 모임 클래스들이 프로그램 구문의 기초단위를 이루며 호출관계가 아닌 다른 형태의 관계들로 계층을 형성

2.2 클래스와 객체  객체지향 패러다임은 대상 ( 객체 ) 을 중심 예 ) 수강신청시스템 : 교수, 학생, 과목, 강의, 강의실  객체 실행되는 소프트웨어 시스템에 존재하는 구조화 된 데이터의 덩어리 성질 (property) 를 가짐 – 객체의 상태 (state) 를 나타냄 행위 (behavior) 를 가짐 – 어떤 식으로 작용하고 반응하는지를 나타냄 – 실세계에 존재하는 객체의 행위를 시뮬레이션 할 수도 있음

객 체객 체

클래스  클래스 객체지향 프로그램에서 추상화의 단위 유사한 객체들 ( 클래스의 인스턴스 ) 을 정의한 소 프트웨어 모듈 – 인스턴스의 구조 ( 속성 ) 를 나타냄 – 행위를 구현하는 메소드를 가짐  각각의 객체들이 갖는 속성과 적용 가능한 메소 드를 정희하고 있는 틀

클래스와 인스턴스의 구별  클래스와 인스턴스를 구별하는 2 가지 규칙 인스턴스들을 가지고 있다면 클래스 클래스에 의하여 정의된 집합에 포함된 일개의 멤버라면 인 스턴스 영화 클래스, 인스턴스는 개별 영화 영화 필름 클래스, 구체적인 영화가 담긴 타이틀은 인스턴스 KR 라는 번호가 붙은 영화 필름 ‘ 영화 필름 ’ 이라는 클래스의 인스턴스 SF(Science Fiction) ‘ 영화 장르 ’ 라는 클래스의 인스턴스 SF 필름 클래스, 인스턴스로 ‘ 별들의 전쟁 ’ 대한극장 1 호관에서 7 시에 상영하는 ‘ 태극기 휘날리며 ’ 인스턴스, ‘ 상영영화 ’ 라는 클래스의 인스턴스

클래스 이름 붙이기  객체지향 시스템에서 가장 중요한 것은 클래스를 찾 아내고 적합한 이름을 붙이는게 관건  대문자로 시작 bankAccount(X) BankAccount(o), Bank_Account(o)  구체적으로 명시, 오직 하나의 의미만 갖도록 명명 Bus – 노선, 버스차량 모두를 의미 BusVehicle- 버스 차량, BusRoute- 노선  단수형 명사  일반적으로 적용되는 명사 시 / 도 – Municipality(o), City(X)  컴퓨터 시스템 내부를 반영하는 단어 X (Record, Table ….)

인스턴스 변수 클래스 안에 정의된 변수로 각 인스턴스에 존재 하는 데이터와 같다. ① 속성 객체의 상태 또는 성질을 나타내는 자료값 단순한 데이터 예 ) name, dateOfBirth ② 연관 ( 관계 ) 주요 클래스 사이의 관계 예 ) supervisor, taskToDo

변수와 객체  변수 객체를 refer( 객체를 담고 있는 그릇 ) 주어진 시점마다 다른 객체를 담고 있을 수 있음  한 객체가 어느 한 시점에 여러 다른 변수에 담겨 있을 수도 있음  변수의 타입 변수가 담고있는 객체의 유형 ( 클래스 ) 을 결정

클래스 변수  클래스 변수는 속하는 모든 인스턴스가 공유 static 변수로 선언 어떤 인스턴스가 클래스 변수의 값을 저장하면 클 래스에 속한 다른 객체가 변수의 값의 변화를 알 수 있고 접근할 수 있음 클래스 변수는 – 디폴트, 상수 값 저장에 적합 – 룩업 테이블이나 유사 구조에 적합

2.4 메소드, 오퍼레이션  메소드 클래스의 행위를 구현하는 데 사용한 일종의 프로 시저 여러 개의 클래스가 같은 이름의 메소드를 가질 수 있음 – 동일한 추상 오퍼레이션을 각 클래스에 맞게 다르게 구 현할 수 있음 – 사각형의 면적 구하는 메소드는 원의 면적을 구하는 메 소드와는 다르게 구현

메소드, 오퍼레이션  오퍼레이션 절차적으로 추상화 된 것으로 클래스의 행위적 특 성을 나타낸다. 행위를 구현한 코드 (method) 와는 독립된 함수 타 입 –calculating area

메소드  메소드를 통하여 객체의 속성을 조작 Employee KimHankook; KimHankook.promote(engineer, manager);

2.5 상 속  슈퍼 클래스 서브 클래스의 공통적인 기능 (feature) 들을 가짐  상속 구조 슈퍼 클래스와 서브 클래스 사이의 관계를 나타냄 삼각형 화살표는 일반화 (generalization) 을 나타 냄  상속 (inheritance) 슈퍼 클래스에 정의한 기능들을 서브 클래스가 묵 시적으로 소유하는 것

상속 구조의 예 Account MortgageAccountSavingsAccountChequingAccount  상속 (inheritance) 슈퍼 클래스에 정의한 기능들을 서브 클래스가 묵 시적으로 소유하는 것

Is-a 관계  일반화를 확인하려면 Is-a 관계를 만족시키 는지를 체크 “ A saving account is an account. ” ( 보통예금 구좌는 은행구좌의 일종이다.) “ A graduate student is a student. ” ( 대학원생은 학생의 일종이다.)  “ A school is a university. ” 가 성립하나 ? Is-a 관계가 아님. –‘ 대학교는 학교의 일종이다. ’ 가 되어야 함

상속 구조  상속된 모든 기능이 서브클래스에서도 의미 가 통하는지 확인

기하학에서의 상속구조

2.6 다형성  하나의 추상 오퍼레이션이 서로 다른 클래스 에서 다른 방법으로 구현될 수 있는 객체지향 의 성질 같은 이름을 가진 여러 개의 다른 메소드가 있어 야 함 어떤 메소드가 실행될지는 변수 안에 있는 객체의 종류에 좌우 됨 If-else 나 switch 문장을 줄여주는 효과

상속, 다형성, 변수

Shape 객체의 오퍼레이션

추상 클래스 오퍼레이션은 의미가 있는 가장 높은 상속구조 에서 선언되는 것이 바람직함 오퍼레이션은 그 수준에서 구현되지 않고 추상화 될 수 있음 이런 클래스를 추상 클래스라 함 – 인스턴스가 생성될 수 없음 – 추상 클래스의 반대는 구체적 (concrete) 클래스 슈퍼 클래스가 추상 오퍼레이션을 가지고 있다면 서브 클래스 어딘가에는 그 오퍼레이션의 구체적 메소드를 가지고 있어야 – 리프 클래스는 모든 오퍼레이션의 구체적 메소드를 가 지고 있거나 상속 받아야 함

재정의 메소드는 상속될 수도 있지만 서브 클래스에 새버전이 구현될 수도 있음 제한 – 예 ) circle 에서는 scale(x, y) 가 의미가 없음 확장 – 예 ) SavingAccount 에서 마이너스가 될 때마다 일정한 수수료가 부과 됨 최적화 – 예 ) circle 의 getPerimeterLength 메소드는 Ellipse 의 메소드보다는 간단히 구현 됨

실행될 메소드 선택 방법  현재 클래스에 오퍼레이션을 위하여 구현된 메소드가 있다면 그 메소드를 선택  없다면 상속구조 바로 위에 있는 슈퍼클래 스를 조사. 그 메소드가 있다면 선택,  구현된 메소드를 발견할 때까지 step 2 를 반복  메소드를 발견할 수 없다면 오류 Java 나 C++ 에서는 프로그램이 컴파일 되지 않 음

동적 바인딩 어떤 메소드가 실행될 것인지를 결정하는 기 간은 실행 시간에만 이루어질 수 있음 선택이 필요한 때는 – 변수가 슈퍼 클래스가 있는 것으로 선언되었을 때 – 변수와 그 서브 클래스들이 실행될 수 있는 상속 메소드 가 하나 이상인 경우

다른 개념들  추상 객체 – 실재 또는 개념적으로 존재하는 것 클래스 – 객체의 모임 슈퍼클래스 – 서브클래스 오퍼레이션 – 메소드 속성과 관계 – 인스턴스 변수  모듈화 코드가 완전히 클래스로만 구성됨  캡슐화 자세한 사항을 클래스 안에 감춤 정보은닉을 가능하게 함 – 프로그래머가 클래스 안의 자세한 사항을 알 필요가 없음

Java 기초  Java 역사 최초의 객체지향 언어는 Simula-67 – 시뮬레이션 프로그램을 작성할 수 있도록 설계 1980 년대 초 Xerox PARC 에서 개발됨 – 새 구문, 오픈 소스 재사용 라이브러리, 바이트 코드, 플 랫폼 독립, 가비지 콜렉션 1980 년대 후반 B. Stroustrup 가 C++ 개발 – 객체지향의 장점과 C 언어의 장점 모두를 인식 1991 년 Sun Microsystems 가 소비자 스마트 장 치에 사용될 수 있는 Oak 언어 설계 – 인터넷이 이용되면서 이런 기술을 이용할 기회가 생김 –1995 SunWorld 회의에서 Java 라고 명명

문자와 스트링  Character 는 유니코드를 나타내는 클래스 여러 바이트로 한 글자를 표현 어떤 언어든지 표현  char 은 유니코드 한 글자를 나타내는 기초 데이터 타입  String 은 문자 집합을 가진 클래스 + 는 스트링을 연결하는 오퍼레이터

배열과 Collection  배열은 동질의 데이터의 모임, 그러나 조작하 는 오퍼레이션이 부족  Vector 는 객체의 모임을 가진 가장 널리 사 용되는 클래스 배열보다는 강력한 기능, 그러나 효율은 떨어짐  Vector 의 접근 멤버를 Iterator 라고 함 v = new Vector(); Iterator i = v.iterator(); while(i.hasNext()) { aMethod(v.next()); }

캐스트 (casting) Java 언어는 타입이 매우 엄격 어떤 변수가 X 타입으로 선언되었을 때 클래스 X 와 그의 슈퍼 클래스에 선언된 오퍼레이션만 적용 시킬 수 있음 –X 의 서브 클래스에 속하는 인스턴스라고 변수에 저장할 수 있음 서브 클래스의 인스턴스가 저장되었다는 것을 안 다면 그 변수를 서브 클래스로 캐스트 할 수 있음 – 예 ) Vector 가 String 의 인스턴스를 가지고 있다는 것을 알면 Iterator 를 이용하여 다음 요소를 가져 올 때, (String) iterator.next();

예외처리 (exception)  잘못될 수 있는 경우는 예외처리로 귀결되어 야 함 Exception 은 하나의 클래스로 잘못될 수 있는 모 든 경우를 포함함  예외처리를 하기 위하여 try-catch 를 사용 try { // some code } catch (ArithmeticException e) { // code to handle division by zero }

인터페이스  추상 클래스와 유사하지만 실행 가능 문장은 아님 여러 클래스에서 의미 있을 오퍼레이션을 정의한 것 추상 데이터 타입  한 클래스가 임의의 개수의 인터페이스를 구 현할 수 있음 오퍼레이션을 메소드로 구현하여야 함  변수의 타입을 인터페이스로 선언할 수 있음 타입을 추상클래스로 정의하는 것과 유사  Java 라이브러리의 중요한 인터페이스는 Runnable, Collection, Iterator, Comparable, Cloneable

패키지와 import  패키지는 관련된 클래스를 서브 시스템으로 묶는 것 모든 클래스는 특정 디렉토리에  다른 패키지에 속한 클래스들이 같은 이름을 가질 수도 있음 하지만 추천할만한 방법은 아님  패키지는 다음과 같이 import import finance.banking.accounts.*;

접근 제어  메소드와 변수에 적용 public – 어떤 클래스도 접근 가능 protected – 패키지 안에 있는 또는 서브 클래스 안에 있는 코드만이 접근 가능 (blank) – 패키지 안에 있는 코드만 적용 private – 클래스 안에 있는 코드만 적용 가능 – 상속이 일어날 수 있음

스레드와 병렬처리  스레드 다른 스레드와 병렬처리 될 수 있는 나열된 문장 들  Java 에서 스레드의 생성  Runnable 을 구현하거나 Thread 를 확장  Run 메소드를 일정한 시간 동안 어떤 작업을 수 행하는 루프로 구현  클래스의 인스턴스를 생성  Start 오퍼레이션을 구동하면 이것이 Run 을 호 출

객체지향 프로그래밍의 어려움  언어의 진화와 떨어지는 기능 Java 는 다른 언어보다는 효율성이 부족 –Virtual Machine 기반 –Dynamic binding  효율성은 객체지향 시스템의 주요 관건 Java 는 계속 진화하고 있어 어떤 기능은 릴리스 가 나올 때마다 떨어짐 다른 언어에도 같은 현상이 있음