350 likes | 526 Views
Java Programming for JDK1.4. Chap 06. ê°ì²´ì§€í–¥ í”„ë¡œê·¸ëž˜ë° ê°œìš” Chap 07. í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ Chpa 08. ê°ì²´ì§€í–¥ 프로그래ë°. 사과. í¬ë„. ìžë‘. 06-01 ê°ì²´ì™€ í´ëž˜ìŠ¤ì˜ ê°œë…. ê°ì²´ (Object) 다른 것과 개별ì 으로 êµ¬ë³„í• ìˆ˜ 있는 실물 ì‹¤ì œ 프로그래ë°ì—서는 ê°ì²´ë¥¼ ì¸ìŠ¤í„´ìŠ¤ë¼ê³ ë„ í•œë‹¤ . Ex) ìžë™ì°¨ , 사과 , 집 … í´ëž˜ìŠ¤ (Class) ê°ì²´ë“¤ì„ íŠ¹ì •í•œ ì˜ë¯¸ë¡œ ë¶„ë¥˜í•˜ê³ , ê·¸ê²ƒì˜ ê³µí†µì ì¸ ì„±ì§ˆë§Œì„ ê³¨ë¼ë‚´ì–´ 추ìƒí™” 시킨 것. ê³¼ì¼.
E N D
Java Programming for JDK1.4 Chap 06. 객체지향 프로그래밍 개요 Chap 07. 클래스와 인터페이스 Chpa 08. 객체지향 프로그래밍
사과 포도 자두 06-01 객체와 클래스의 개념 • 객체(Object)다른 것과 개별적으로 구별할 수 있는 실물 실제프로그래밍에서는 객체를 인스턴스라고도 한다.Ex)자동차, 사과, 집 … • 클래스(Class)객체들을 특정한 의미로 분류하고, 그것의 공통적인성질만을 골라내어 추상화 시킨 것 과일 객체(현실의 역역) 클래스(추상화된 영역)
일반화 포도 수박 먹을 것 과일 야채 구체화 06-02. 상속(Inheritance) • 프로그래밍에서의 상속해당 클래스의 범주를 좀 더 세분화 하는 것 • 일반화(Generalization)일반적 범주로 통합(추상화) • 구체화(Specailization)세부적인 파트로 분류
식사 한국인밥먹기() 수저/젓가락사용 서양인밥먹기() 포크/나이프사용 06-03. 상속(Inheritance) 2 • 다중상속한 클래스가 복수의 클래스에서 상속을 받는 것 • 다형성상속시 원래의 클래스가 가진 기능을 변경해서사용하는 것
메세지 일반 어둡다! 감독 감독 특수 06-04. 객체지향 프로그래밍의 특성 • 클래스필드 + 메소드 & 메시지 사용필드(변수/프로퍼티) –속성을 저장메소드(함수) –객체의 행동을 기술메시지(인수) –명령 • 절차적 프로그래밍 = 데이터 구조 + 알고리즘 • 객체지향 프로그래밍 = 객체 + 메세지
CPU 메인보드 RAM AGP HDD 본체 06-05.모듈화와 코드 재사용 • 모듈(Module)비교적 작은 프로그램의 단위(프로그램의 부품)독립적으로 특수한 기능을 실행하는 단위 • 재사용의 예STL, Collection Framework, GUI 등 • Module, Header, LIB, DLL, Class
06-06. 자바 프로그램 구조 • 클래스 선언(기본요소 : 필드, 메소드)<클래스제어자> class <클래스 이름> { <필드선언> <메소드선언>} • 인터페이스(기본요소 : 추상메소드)<인터페이스제어자> interface <인터페이스 이름>{ <상수선언> <추상 메소드 선언>}
06-07. 자바 프로그램 구조 2 • 클래스 상속<클래스제어자> class <서브클래스> extends <수퍼클래스>{……} • 인터페이스의 구현 기본 문법(복수 구현 가능)<클래스제어자> class <클래스 이름> implements <인터페이스1>, <인터페이스 2>, …{……} • 자바의 상속인터페이스 구현 = 타입상속클래스의 상속 = 구현상속
06-08. 자바 프로그램 구조 3 • 참조형 변수 선언의 기본 문법<클래스 이름> <변수 이름> [= <초기값>];<인터페이스 이름> <변수 이름> [= <초기값>]; • 생성(생성자 : 객체가 생성되면 처음 실행하는 메소드)new <생성자> • 맴버의 참조(접근 제어자 Access modifier)public : 외부에서의 접근 허용private : 외부에서의 제어 차단
07-01. 클래스와 인터페이스 • 클래스필드 + 메소드데이터형 정의 + 구현단일 상속다중 인터페이스 구현 • 인터페이스메소드데이터형 정의다중 상속(을 비슷하게 지원)
07-02. 접근제어자 • (없을 때)같은 패키지 내에서 접근 가능 • public(공용)자신을 볼 수 있는 모든 곳에서 접근가능 • protected같은 패키지(폴더) 또는 선언된 구조체와 그것을상속하는 구조체에서 접근 가능 • private자신이 선언된 구조체 내부에서만 접근 가능
07-03. 클래스의 선언과 초기화 • 클래스 선언[<클래스 제어자>] class <클래스 식별자> [extends <슈퍼클래스>] [implements <인터페이스>] {[필드][메소드][중첩클래스], [중첩인터페이스][각종 초기화 블록][생성자]} • 클래스 제어자없음 : 패키지 내부에서만 상속, 참조public : 패키지 내부, 외부에서 상속, 참조protected : 패키지 내부 상속, 참조 외부 상속만private : 같은 파일 내에서만 상속과 참조 가능abstract : 모든 메소드가 구현되지 않은 클래스final : 더 이상 확장 불가(상속 X) strictfp : 보다 정확한 부동소수점 연산 사용static : 정적 클래스
07-04. 필드 • 필드선언 : <필드제어자> <데이터형> <변수식별자>; • 필드 제어자없음 : 패키지 내부에서만 접근public : 패키지 내부, 외부에서 접근 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 접근가능private : 선언된 클래스 내에서만 접근가능static : 정적 맴버(클래스당 하나) final : 초기화가 끝나면 값을 바꿀 수 없음(상수선언용) transient : 프로그램 외적인 요인으로 특성이 바뀔 수 있음volatile : 필드를 다룰 때마다 동기화시킴(멀티스레딩 동기화)
07-05. 메소드 • 메소드의 선언<메소드제어자> <반환형> <메소드 이름> ([인자목록]) [throws <예외 목록>]<메소드 본체> • 메소드 제어자없음 : 패키지 내부에서만 호출 가능public : 패키지 내부, 외부에서 호출 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 호출가능private : 선언된 클래스 내에서만 호출가능static : 정적 메소드(일반적으로 정적 필드 다루기 용) abstract : 추상메소드로 선언(메소드 본체를 제외하고 선언) final : 한번 선언되면 서브 클래스에서 오버라이딩 할수 없음synchronized : 동기화되어야 할 메소드(한 스레드만 사용) native : 네이티브 메소드로 선언(c언어로 구성된 함수 사용용) strictfp : 보다 엄격한 부동 소수점 규격과 연산 사용
07-06. 생성자(Constructor) • 객체가 생성된 후 실행되어 변수 초기화 등의 객체사용의 준비 작업을 실행하는 메소드 • 반환형은 언제나 객체 자신이므로 반환형 명시X • 생성자의 이름은 클래스와 같아야 한다. • 생성자 선언<생성자제어자> <생성자 이름> ([인자목록]) [throws<예외목록>]<생성자 본체> • 생성자 제어자없음 : 패키지 내부에서만 호출 가능public : 패키지 내부, 외부에서 호출 가능protected : 패키지 내부, 선언된 클래스, 서브클래스 호출가능private : 선언된 클래스 내에서만 호출가능
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] + “마리, “; } }}
Class A Class A’ Class A’ Class A’ Class A’ Static Static Static Static Static 07-08. 정적 필드와 정적 메소드 • 정적(static)언제나 존재하는 것 • 정적 필드한 개의 클래스로부터 파생된 모든 클래스가 사용각 클래스에 따로 있는 것이 아니라 하나의 필드 • 정적 메소드객체를 생성않고도 사용, 주로 정적 필드 제어에 사용
07-09. 정적 초기화 블록 • 정적 필드의 초기화를 위한 블록(앞에 static) • 정적 초기화 블록 선언static 블록 • 제약사항정적 메소드와 같은 것으로 취급비정적 필드, 메소드 참조 X클래스가 불려질 때 한번만 호출(오직 처음 한번만)비정적 초기화 블록이나 생성자 보다 우선적으로 호출 • 초기화 순서1. 정적 필드 & 정적 초기화 블록2. 비정적 필드 & 비정적 초기화 블록3. 생성자
07-10. 상속 • 클래스의 확장class <서브클래스> extends <슈퍼클래스> { /*…*/} • 클래스 상속에 대해서다중상속 X모든 자바의 클래스는 object 클래스의 서브 클래스final 클래스는 더 이상 확장 X abstract 클래스는 추상 클래스로 정의 또는 구현되지 않은 추상 메소드를 모두 구현 해야한다.
07-11. 인터페이스의 선언 • 상수/추상 메소드 만을 포함하는 구조체(데이터형 선언) • 인터페이스 선언[<인터페이스제어자>] class <인터페이스 식별자> [extends <슈퍼 인터페이스>, <슈퍼인터페이스>]{//<인터페이스 본체> [상수 필드] [추상 메소드] [중첩 클래스], [중첩 인터페이스]} • 인터페이스는 여러 슈퍼 인터페이스를 확장인터페이스 상속은 메소드의 선언만 가져오므로 OK단, 구현 상속은 할 수 없으므로 class 상속 X모든 필드는 묵시적으로 public, static, final 제어자 적용(즉 공용) -묵시적으로 제어자가 적용되나, 분명하게 하기 위해 사용-메소드는 묵시적으로 public이 사용(private, protected 사용 X)
07-12. 인터페이스의 구현 • 비추상 클래스 to 인터페이스 : 정의된 모든 메소드 구현 • 추상 클래스 to 인터페이스 : 모두 구현할 필요는 없음 • 인터페이스의 구현class <클래스> implements <인터페이스> { /*……*/} • 인터페이스도 하나의 데이터 형인터페이스형 변수 선언, 구현한 클래스 객체 대입 가능- 클래스가 인터페이스에 의해 제어되면 구조/기능은 무시되고, 기능만 사용 가능(일종의 형변환) • this( )-비정적 메소드에서만객체 자신 참조(this.A : 객체 자신의 A필드) • super( )-비정적 메소드에서만객체의 super 클래스 참조(super.A : 슈퍼클래스의 A필드)
07-13. 중첩 클래스(Nested class) • 중첩클래스클래스가 다른 클래스 내부 또는 메소드 내부에 존재 • 최상위 클래스(Top Level class)일반클래스-패키지 내 or 아무 패키지에 속하지 않은 일반 클래스중첩된 최상위 클래스-다른 클래스에 중첩된 정적 클래스 or 인터페이스(묵시적 정적) • 내부 클래스(Inner class)클래스의 멤버 클래스-다른 클래스의 비정적 멤버로 정의된 클래스지역 클래스-메소드의 코드 블록 내에서 선언된 클래스익명 클래스-몸체만 정의되고 이름은 없는 클래스, 1회용 하나의 인스턴스 생성
07-14. 중첩된 최상위 클래스 / 멤버 클래스 • 중첩된 최상위 클래스자신이 포함된 클래스의 정적인 멤버를 다룰 수 있음-그 외에는 일반 클래스와 동일-인터페이스는 묵시적 정적 선언(상수 초기화 시 정적 멤버만 참조) • 멤버 클래스비정적인 중첩 클래스-외부 클래스의 모든 멤버들 제어 가능-자신을 포함한 외부 클래스의 모든 멤버 사용/참조-상수를 제외한 정적 멤버 사용 금지-외부 클래스 밖에서 독립적으로 생성할 수 없음 • 내부 클래스 선언 예pInner = pOuter.new Inner();
07-15. 지역 클래스 / 익명 클래스 • 지역 클래스클래스의 멤버가 아닌 메소드의 코드 블록 내에 선언된 클래스(정적 선언 X)클래스가 선언된 코드 블록 외부에서 생성/참조 X비정적 메소드 내에 선언된 지역 클래스-메소드 상수, 자신이 속한 메소드를 포함한 클래스 멤버정적 메소드 내에 선언된 지역 클래스-메소드 상수, 자신이 속한 메소드를 포함한 클래스 정적 멤버 참조 • 익명 클래스간단한 클래스의 확장, 단순한 인터페이스 구현에 사용모두 내부 클래스로 간주되며 정적 멤버를 가지지 못함위치한 곳에 따라서 제어할 수 있는 멤버가 달라짐제약 사항은 다른 중첩 클래스와 동일new 클래스이름 () { …… }new 인터페이스이름 (){ …… }
07-16. 형변환 • 광역화 참조 형변환(Upcasting)서브 클래스에서 슈퍼클래스로클래스에서 이미 구현된 인터페이스로서브 인터페이스에서 슈퍼 인터페이스로모든 인터페이스에서 Object로모든 배열에서 Object or Clonable or serializable로배열 SC[]에서 TC[]로 변환시 TC가 SC의 광역화 참조형인 경우 • 협소화 형변환(Downcasting)슈퍼클래스에서 서브클래스로final이 아닌 클래스에서 클래스가 구현하지 않은 인터페이스로Object에서 임의의 배열이나 인터페이스로인터페이스에서 final이 아닌 클래스로인터페이스에서 그 인터페이스를 구현하면서 final인 클래스로배열 TC[]에서 SC[]로 변환시 SC가 TC의 협소화 참조형인 경우
07-17. 변수의 유효범위(Scope) • 블록내의 지역변수선언된 지점에서 블록이 끝날 때까지 • 메소드, 생성자의 인자메소드나 생성자 블록 전체 • 지역 클래스선언된 지점에서부터 블록의 끝까지, 클래스 내부 포함 • for문의 초기와 영역에 선언된 변수초기화 영역, for문의 나머지 영역의 블록 or 표현 전체 영역 • 예외처리(catch)문에 선언된 지역 변수해당하는 “catch”문에 따라오는 블록 전체
08-01. 객체지향 프로그래밍(OOP) • 캡슐화(모듈화와 관련)서로 관련된 데이터나 기능을 한 곳에 모아 놓는 것독립적으로 개발될 수 있게 하므로 유지 보수 용이구현을 위해 클래스 사용 • 정보은닉불필요한 정보를 외부로부터 숨기는 것클래스 구현시 접근제어자를 통해 정보접근 제한
SuperClass A SubClass B Virtual Func A1 Function A1 Virtual Func Table 08-02. 가상함수와 가상함수 테이블 • 가상함수실제 함수를 가지지 않는 함수 • 가상함수 테이블가상 메소드와 실제 메소드의 매핑을 저장하는 테이블각 개체는 고유한 가상함수 테이블을 가짐
08-03. 캡슐화와 정보은닉 구현 • 정보 감추기사용자가 임의로 수정을 해서는 안되는 멤버는 private • 모듈간 의존성 없애기필요한 데이터/메소드는 한 클래스로(다른 모듈에 있을 경우 참조시 문제 발생 가능) • 모듈의 기능 정의인터페이스를 다양하게 제공기능을 잘게 쪼개기
포함 상속 냉장고 전자제품 RF-12 사과쥬스 연관 08-04. 상속/포함/연관 • 상속(Inheritance) 슈퍼클래스의 속성과 기능을 그대로 물려 받기별개의 모듈을 만드는 것이 아님(한 모듈에 통합) • 포함(Aggregation)모듈이 다른 모듈에 포함되는 관계(주종관계)컴포넌트 : 다른 모듈 속에서 부품처럼 사용 • 연관(Association)가장 약한 상관 관계(단순한 참조-독립적 개체)
08-05. 타입 상속과 구현 상속 • 타입상속인터페이스의 구현데이터 형 정의 • 구현상속(일반적으로 말하는 상속)클래스의 상속데이터 형 및 구현도 정의 • 상속의 이점객체의 계층별 분류(같은 분류 객체를 같은 방식 처리)잘못된 형변환, 사용을 컴파일러/VM이 점검서브/슈퍼클래스의 모든 기능을 다시 정의할 필요 없음(중복 기능은 추가 or 대체)
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 <구현부> } }
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 <처리부> }}
08-08. Method Overriding & Overloading • Overriding슈퍼클래스의 같은 이름/서명 의 메소드를 대체VM에서 적용전달된 메시지를 처리할 실제 메소드 선정에 영향 • Overloading메소드의 이름은 동일, 서명이 다른 메소드 추가-즉, 인수의 개수 또는 타입이 서로 달라야 한다.컴파일시 적용객체에 전달할 메시지 작성에 영향
08-09. 필드 가리기 • 필드의 경우 오버로딩, 오버라이딩 불허 • 서브클래스에서 슈퍼클래스와 같은 이름의 필드선언슈퍼클래스의 필드는 서브클래스에서 보이지 않음 • 가려진 슈퍼클래스의 필드 호출법형변환super 참조