Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

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

6 객 체객 체

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

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

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

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

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

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

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

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

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

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

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

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

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

20 기하학에서의 상속구조

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

22 상속, 다형성, 변수

23 Shape 객체의 오퍼레이션

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Similar presentations


Ads by Google