1 / 35

Java Programming for JDK1.4

Java Programming for JDK1.4. Chap 06. 객체지향 프로그래밍 개요 Chap 07. 클래스와 인터페이스 Chpa 08. 객체지향 프로그래밍. 사과. 포도. 자두. 06-01 객체와 클래스의 개념. 객체 (Object) 다른 것과 개별적으로 구별할 수 있는 실물 실제 프로그래밍에서는 객체를 인스턴스라고도 한다 . Ex) 자동차 , 사과 , 집 … 클래스 (Class) 객체들을 특정한 의미로 분류하고 , 그것의 공통적인 성질만을 골라내어 추상화 시킨 것. 과일.

lark
Download Presentation

Java Programming for JDK1.4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Programming for JDK1.4 Chap 06. 객체지향 프로그래밍 개요 Chap 07. 클래스와 인터페이스 Chpa 08. 객체지향 프로그래밍

  2. 사과 포도 자두 06-01 객체와 클래스의 개념 • 객체(Object)다른 것과 개별적으로 구별할 수 있는 실물 실제프로그래밍에서는 객체를 인스턴스라고도 한다.Ex)자동차, 사과, 집 … • 클래스(Class)객체들을 특정한 의미로 분류하고, 그것의 공통적인성질만을 골라내어 추상화 시킨 것 과일 객체(현실의 역역) 클래스(추상화된 영역)

  3. 일반화 포도 수박 먹을 것 과일 야채 구체화 06-02. 상속(Inheritance) • 프로그래밍에서의 상속해당 클래스의 범주를 좀 더 세분화 하는 것 • 일반화(Generalization)일반적 범주로 통합(추상화) • 구체화(Specailization)세부적인 파트로 분류

  4. 식사 한국인밥먹기() 수저/젓가락사용 서양인밥먹기() 포크/나이프사용 06-03. 상속(Inheritance) 2 • 다중상속한 클래스가 복수의 클래스에서 상속을 받는 것 • 다형성상속시 원래의 클래스가 가진 기능을 변경해서사용하는 것

  5. 메세지 일반 어둡다! 감독 감독 특수 06-04. 객체지향 프로그래밍의 특성 • 클래스필드 + 메소드 & 메시지 사용필드(변수/프로퍼티) –속성을 저장메소드(함수) –객체의 행동을 기술메시지(인수) –명령 • 절차적 프로그래밍 = 데이터 구조 + 알고리즘 • 객체지향 프로그래밍 = 객체 + 메세지

  6. CPU 메인보드 RAM AGP HDD 본체 06-05.모듈화와 코드 재사용 • 모듈(Module)비교적 작은 프로그램의 단위(프로그램의 부품)독립적으로 특수한 기능을 실행하는 단위 • 재사용의 예STL, Collection Framework, GUI 등 • Module, Header, LIB, DLL, Class

  7. 06-06. 자바 프로그램 구조 • 클래스 선언(기본요소 : 필드, 메소드)<클래스제어자> class <클래스 이름> { <필드선언> <메소드선언>} • 인터페이스(기본요소 : 추상메소드)<인터페이스제어자> interface <인터페이스 이름>{ <상수선언> <추상 메소드 선언>}

  8. 06-07. 자바 프로그램 구조 2 • 클래스 상속<클래스제어자> class <서브클래스> extends <수퍼클래스>{……} • 인터페이스의 구현 기본 문법(복수 구현 가능)<클래스제어자> class <클래스 이름> implements <인터페이스1>, <인터페이스 2>, …{……} • 자바의 상속인터페이스 구현 = 타입상속클래스의 상속 = 구현상속

  9. 06-08. 자바 프로그램 구조 3 • 참조형 변수 선언의 기본 문법<클래스 이름> <변수 이름> [= <초기값>];<인터페이스 이름> <변수 이름> [= <초기값>]; • 생성(생성자 : 객체가 생성되면 처음 실행하는 메소드)new <생성자> • 맴버의 참조(접근 제어자 Access modifier)public : 외부에서의 접근 허용private : 외부에서의 제어 차단

  10. 07-01. 클래스와 인터페이스 • 클래스필드 + 메소드데이터형 정의 + 구현단일 상속다중 인터페이스 구현 • 인터페이스메소드데이터형 정의다중 상속(을 비슷하게 지원)

  11. 07-02. 접근제어자 • (없을 때)같은 패키지 내에서 접근 가능 • public(공용)자신을 볼 수 있는 모든 곳에서 접근가능 • protected같은 패키지(폴더) 또는 선언된 구조체와 그것을상속하는 구조체에서 접근 가능 • private자신이 선언된 구조체 내부에서만 접근 가능

  12. 07-03. 클래스의 선언과 초기화 • 클래스 선언[<클래스 제어자>] class <클래스 식별자> [extends <슈퍼클래스>] [implements <인터페이스>] {[필드][메소드][중첩클래스], [중첩인터페이스][각종 초기화 블록][생성자]} • 클래스 제어자없음 : 패키지 내부에서만 상속, 참조public : 패키지 내부, 외부에서 상속, 참조protected : 패키지 내부 상속, 참조 외부 상속만private : 같은 파일 내에서만 상속과 참조 가능abstract : 모든 메소드가 구현되지 않은 클래스final : 더 이상 확장 불가(상속 X) strictfp : 보다 정확한 부동소수점 연산 사용static : 정적 클래스

  13. 07-04. 필드 • 필드선언 : <필드제어자> <데이터형> <변수식별자>; • 필드 제어자없음 : 패키지 내부에서만 접근public : 패키지 내부, 외부에서 접근 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 접근가능private : 선언된 클래스 내에서만 접근가능static : 정적 맴버(클래스당 하나) final : 초기화가 끝나면 값을 바꿀 수 없음(상수선언용) transient : 프로그램 외적인 요인으로 특성이 바뀔 수 있음volatile : 필드를 다룰 때마다 동기화시킴(멀티스레딩 동기화)

  14. 07-05. 메소드 • 메소드의 선언<메소드제어자> <반환형> <메소드 이름> ([인자목록]) [throws <예외 목록>]<메소드 본체> • 메소드 제어자없음 : 패키지 내부에서만 호출 가능public : 패키지 내부, 외부에서 호출 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 호출가능private : 선언된 클래스 내에서만 호출가능static : 정적 메소드(일반적으로 정적 필드 다루기 용) abstract : 추상메소드로 선언(메소드 본체를 제외하고 선언) final : 한번 선언되면 서브 클래스에서 오버라이딩 할수 없음synchronized : 동기화되어야 할 메소드(한 스레드만 사용) native : 네이티브 메소드로 선언(c언어로 구성된 함수 사용용) strictfp : 보다 엄격한 부동 소수점 규격과 연산 사용

  15. 07-06. 생성자(Constructor) • 객체가 생성된 후 실행되어 변수 초기화 등의 객체사용의 준비 작업을 실행하는 메소드 • 반환형은 언제나 객체 자신이므로 반환형 명시X • 생성자의 이름은 클래스와 같아야 한다. • 생성자 선언<생성자제어자> <생성자 이름> ([인자목록]) [throws<예외목록>]<생성자 본체> • 생성자 제어자없음 : 패키지 내부에서만 호출 가능public : 패키지 내부, 외부에서 호출 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 호출가능private : 선언된 클래스 내에서만 호출가능

  16. 07-07. 초기화 블록 • 객체가 생성 되었을 때, 초기화를 수행 • 생성자에서 하는 것과 차이는 없음 • 간단한 계산으로 초기화 할 수 없을 경우 유용자바에서는 변수를 선언한 시점에서 초기화를 권장 • 초기화 블록 선언블록public class ExInit{ string szSong; int anList[] = new int[100]; { for int i=0; i<asList.length; i++) asList[i] = I; for(int i=0; i<asList.length; i++) szSong += “토끼” + asList[i] + “마리, “; } }}

  17. Class A Class A’ Class A’ Class A’ Class A’ Static Static Static Static Static 07-08. 정적 필드와 정적 메소드 • 정적(static)언제나 존재하는 것 • 정적 필드한 개의 클래스로부터 파생된 모든 클래스가 사용각 클래스에 따로 있는 것이 아니라 하나의 필드 • 정적 메소드객체를 생성않고도 사용, 주로 정적 필드 제어에 사용

  18. 07-09. 정적 초기화 블록 • 정적 필드의 초기화를 위한 블록(앞에 static) • 정적 초기화 블록 선언static 블록 • 제약사항정적 메소드와 같은 것으로 취급비정적 필드, 메소드 참조 X클래스가 불려질 때 한번만 호출(오직 처음 한번만)비정적 초기화 블록이나 생성자 보다 우선적으로 호출 • 초기화 순서1. 정적 필드 & 정적 초기화 블록2. 비정적 필드 & 비정적 초기화 블록3. 생성자

  19. 07-10. 상속 • 클래스의 확장class <서브클래스> extends <슈퍼클래스> { /*…*/} • 클래스 상속에 대해서다중상속 X모든 자바의 클래스는 object 클래스의 서브 클래스final 클래스는 더 이상 확장 X abstract 클래스는 추상 클래스로 정의 또는 구현되지 않은 추상 메소드를 모두 구현 해야한다.

  20. 07-11. 인터페이스의 선언 • 상수/추상 메소드 만을 포함하는 구조체(데이터형 선언) • 인터페이스 선언[<인터페이스제어자>] class <인터페이스 식별자> [extends <슈퍼 인터페이스>, <슈퍼인터페이스>]{//<인터페이스 본체> [상수 필드] [추상 메소드] [중첩 클래스], [중첩 인터페이스]} • 인터페이스는 여러 슈퍼 인터페이스를 확장인터페이스 상속은 메소드의 선언만 가져오므로 OK단, 구현 상속은 할 수 없으므로 class 상속 X모든 필드는 묵시적으로 public, static, final 제어자 적용(즉 공용) -묵시적으로 제어자가 적용되나, 분명하게 하기 위해 사용-메소드는 묵시적으로 public이 사용(private, protected 사용 X)

  21. 07-12. 인터페이스의 구현 • 비추상 클래스 to 인터페이스 : 정의된 모든 메소드 구현 • 추상 클래스 to 인터페이스 : 모두 구현할 필요는 없음 • 인터페이스의 구현class <클래스> implements <인터페이스> { /*……*/} • 인터페이스도 하나의 데이터 형인터페이스형 변수 선언, 구현한 클래스 객체 대입 가능- 클래스가 인터페이스에 의해 제어되면 구조/기능은 무시되고, 기능만 사용 가능(일종의 형변환) • this( )-비정적 메소드에서만객체 자신 참조(this.A : 객체 자신의 A필드) • super( )-비정적 메소드에서만객체의 super 클래스 참조(super.A : 슈퍼클래스의 A필드)

  22. 07-13. 중첩 클래스(Nested class) • 중첩클래스클래스가 다른 클래스 내부 또는 메소드 내부에 존재 • 최상위 클래스(Top Level class)일반클래스-패키지 내 or 아무 패키지에 속하지 않은 일반 클래스중첩된 최상위 클래스-다른 클래스에 중첩된 정적 클래스 or 인터페이스(묵시적 정적) • 내부 클래스(Inner class)클래스의 멤버 클래스-다른 클래스의 비정적 멤버로 정의된 클래스지역 클래스-메소드의 코드 블록 내에서 선언된 클래스익명 클래스-몸체만 정의되고 이름은 없는 클래스, 1회용 하나의 인스턴스 생성

  23. 07-14. 중첩된 최상위 클래스 / 멤버 클래스 • 중첩된 최상위 클래스자신이 포함된 클래스의 정적인 멤버를 다룰 수 있음-그 외에는 일반 클래스와 동일-인터페이스는 묵시적 정적 선언(상수 초기화 시 정적 멤버만 참조) • 멤버 클래스비정적인 중첩 클래스-외부 클래스의 모든 멤버들 제어 가능-자신을 포함한 외부 클래스의 모든 멤버 사용/참조-상수를 제외한 정적 멤버 사용 금지-외부 클래스 밖에서 독립적으로 생성할 수 없음 • 내부 클래스 선언 예pInner = pOuter.new Inner();

  24. 07-15. 지역 클래스 / 익명 클래스 • 지역 클래스클래스의 멤버가 아닌 메소드의 코드 블록 내에 선언된 클래스(정적 선언 X)클래스가 선언된 코드 블록 외부에서 생성/참조 X비정적 메소드 내에 선언된 지역 클래스-메소드 상수, 자신이 속한 메소드를 포함한 클래스 멤버정적 메소드 내에 선언된 지역 클래스-메소드 상수, 자신이 속한 메소드를 포함한 클래스 정적 멤버 참조 • 익명 클래스간단한 클래스의 확장, 단순한 인터페이스 구현에 사용모두 내부 클래스로 간주되며 정적 멤버를 가지지 못함위치한 곳에 따라서 제어할 수 있는 멤버가 달라짐제약 사항은 다른 중첩 클래스와 동일new 클래스이름 () { …… }new 인터페이스이름 (){ …… }

  25. 07-16. 형변환 • 광역화 참조 형변환(Upcasting)서브 클래스에서 슈퍼클래스로클래스에서 이미 구현된 인터페이스로서브 인터페이스에서 슈퍼 인터페이스로모든 인터페이스에서 Object로모든 배열에서 Object or Clonable or serializable로배열 SC[]에서 TC[]로 변환시 TC가 SC의 광역화 참조형인 경우 • 협소화 형변환(Downcasting)슈퍼클래스에서 서브클래스로final이 아닌 클래스에서 클래스가 구현하지 않은 인터페이스로Object에서 임의의 배열이나 인터페이스로인터페이스에서 final이 아닌 클래스로인터페이스에서 그 인터페이스를 구현하면서 final인 클래스로배열 TC[]에서 SC[]로 변환시 SC가 TC의 협소화 참조형인 경우

  26. 07-17. 변수의 유효범위(Scope) • 블록내의 지역변수선언된 지점에서 블록이 끝날 때까지 • 메소드, 생성자의 인자메소드나 생성자 블록 전체 • 지역 클래스선언된 지점에서부터 블록의 끝까지, 클래스 내부 포함 • for문의 초기와 영역에 선언된 변수초기화 영역, for문의 나머지 영역의 블록 or 표현 전체 영역 • 예외처리(catch)문에 선언된 지역 변수해당하는 “catch”문에 따라오는 블록 전체

  27. 08-01. 객체지향 프로그래밍(OOP) • 캡슐화(모듈화와 관련)서로 관련된 데이터나 기능을 한 곳에 모아 놓는 것독립적으로 개발될 수 있게 하므로 유지 보수 용이구현을 위해 클래스 사용 • 정보은닉불필요한 정보를 외부로부터 숨기는 것클래스 구현시 접근제어자를 통해 정보접근 제한

  28. SuperClass A SubClass B Virtual Func A1 Function A1 Virtual Func Table 08-02. 가상함수와 가상함수 테이블 • 가상함수실제 함수를 가지지 않는 함수 • 가상함수 테이블가상 메소드와 실제 메소드의 매핑을 저장하는 테이블각 개체는 고유한 가상함수 테이블을 가짐

  29. 08-03. 캡슐화와 정보은닉 구현 • 정보 감추기사용자가 임의로 수정을 해서는 안되는 멤버는 private • 모듈간 의존성 없애기필요한 데이터/메소드는 한 클래스로(다른 모듈에 있을 경우 참조시 문제 발생 가능) • 모듈의 기능 정의인터페이스를 다양하게 제공기능을 잘게 쪼개기

  30. 포함 상속 냉장고 전자제품 RF-12 사과쥬스 연관 08-04. 상속/포함/연관 • 상속(Inheritance) 슈퍼클래스의 속성과 기능을 그대로 물려 받기별개의 모듈을 만드는 것이 아님(한 모듈에 통합) • 포함(Aggregation)모듈이 다른 모듈에 포함되는 관계(주종관계)컴포넌트 : 다른 모듈 속에서 부품처럼 사용 • 연관(Association)가장 약한 상관 관계(단순한 참조-독립적 개체)

  31. 08-05. 타입 상속과 구현 상속 • 타입상속인터페이스의 구현데이터 형 정의 • 구현상속(일반적으로 말하는 상속)클래스의 상속데이터 형 및 구현도 정의 • 상속의 이점객체의 계층별 분류(같은 분류 객체를 같은 방식 처리)잘못된 형변환, 사용을 컴파일러/VM이 점검서브/슈퍼클래스의 모든 기능을 다시 정의할 필요 없음(중복 기능은 추가 or 대체)

  32. 08-06. 다형성의 구현(인터페이스) • 하나의 인터페이스로 구현시 변경interface Calc { public void calc1(String order);} class Computer implements Calc { public void calc1(String order){ A <구현부> } } class Console implements Calc { public void calc1(String order){ B <구현부> } }

  33. 08-07. 다형성의 구현(상속) • Overriding서브클래스에서 슈퍼클래스의 메소드를 재정의class Com{ public void calc(String order) { A <처리부> }}class Pcom extends Com { public void calc(String order){ B <처리부> }}class Scom extends Com { public void calc(String order){ C <처리부> }}

  34. 08-08. Method Overriding & Overloading • Overriding슈퍼클래스의 같은 이름/서명 의 메소드를 대체VM에서 적용전달된 메시지를 처리할 실제 메소드 선정에 영향 • Overloading메소드의 이름은 동일, 서명이 다른 메소드 추가-즉, 인수의 개수 또는 타입이 서로 달라야 한다.컴파일시 적용객체에 전달할 메시지 작성에 영향

  35. 08-09. 필드 가리기 • 필드의 경우 오버로딩, 오버라이딩 불허 • 서브클래스에서 슈퍼클래스와 같은 이름의 필드선언슈퍼클래스의 필드는 서브클래스에서 보이지 않음 • 가려진 슈퍼클래스의 필드 호출법형변환super 참조

More Related