자바 5.0 프로그래밍
chapter 07 : 클래스 고급 Ⅱ
학습목표 static singleton 패턴 final abstract 클래스 interface 내부클래스 member 내부클래스 local 내부클래스 static 내부클래스
특징 사용 static 프로그램 실행시 static으로 지정된 클래스의 멤버가 자동으로 메모리에 로드된다. 프로그램 종료시 소멸된다. 객체생성과 무관하다. ( 객체생성 前인 프로그램 시작과 관련이 있다 ) 단 한번 실행된다. static 멤버 접근은 클래스이름.멤버 로 접근한다. 대표적인 메소드는 main 메소드이다. 사용 클래스 : inner 클래스에서 사용 멤버변수 : 인스턴스간 공유 목적으로 사용 멤버메소드 : 객체생성없이 접근할 목적으로 사용
static 예제
static 메소드 사용시 주의할 점 static static 메소드에서 인스턴스변수를 사용하지 못한다. 로컬변수 static 변수
정의 작성단계 Singleton 디자인 패턴 단 하나의 인스턴스만 생성하는 경우에 사용할 수 있는 static을 이용한 패턴. 1단계 : 생성자를 private로 지정한다.
Singleton 디자인 패턴 2 단계 : 자신의 클래스에서 객체생성한다. static으로 지정하여 프로그램 실행시 객체생성이 된다.
Singleton 디자인 패턴 3 단계 : 다른 클래스에서 접근할 수 있는 방법을 제공한다. 객체생성 없이 접근할 수 있는 방법으로 제공한다. 메소드 접근은 클래스이름.메소드 로 접근한다.
특징 용도 상수 final ‘금지’ 의 의미가 있다. 클래스 – 상속 금지 멤버메소드 – overriding 금지 멤버변수 - 상수 상수 프로그램 시작부터 끝까지 동일한 값을 갖는다. 모든 클래스에서 동일한 값을 공유해야 한다. 대문자로 상수명을 지정한다. public static final TOTAL_NUM = 40 ;
추상메소드 ( abstract method ) 정의 실체가 없는 추상적인( 구현되지 않은 ) 의미. 내용은 없고 껍데기만 있는것을 의미. 용도 클래스 - 추상클래스. 멤버메소드 – 추상메소드. 추상메소드 ( abstract method ) 구현되지 않은 메소드, 즉 body가 없는 메소드. public abstract void run(); 구현메소드 ( concrete method ) 구현된 메소드, 즉 body가 있는 메소드. public void run(){ … }
정의 특징 용도 추상클래스 ( abstract class ) 클래스 선언시 abstract 지정자로 선언된 클래스. 객체생성이 불가능하다. 멤버 : 멤버변수 , 생성자 , concrete메소드 , abstract메소드 등 모두 가능하다. 추상메소드가 없어도 추상클래스로 선언 가능하다. 추상메소드가 있으면 반드시 추상클래스로 선언한다. 하위클래스를 이용하여 멤버를 재사용한다. Type으로 사용 가능하다. 하위클래스에 강제성과 통일성을 줄 수 있다. 용도 하위클래스에서 반드시 구현해야하는 메소드를 상위클래스에서 정의할 때 상위클래스에서 메소드구현을 하지않고 실제 구현은 하위클래스에서 한다. 이때 상위클래스에서 메소드는 추상메소드로 선언하여 강제성과 통일성을 줄수 있다.
예제 : 추상메소드 사용전 추상클래스 ( abstract class ) 문제점 상위 클래스에서 구현한 메소드를 무시하고 하위 클래스에서 추가된 메소드로 구현한다. 강제성과 통일성이 없다.
예제 : 추상메소드 사용후 추상클래스 ( abstract class ) 해결 상위 클래스에서 선언한 추상 메소드를 하위 클래스에서 구현. 강제성과 통일성을 준다. 즉, 재사용이 가능하다.
정의 특징 용도 인터페이스 ( interface ) class 대신 interface로 선언한 객체를 의미한다. 객체생성이 불가능하다. 멤버 : 상수, 추상메소드 만 가능하다. 하위클래스를 이용하여 멤버를 재사용한다. Type으로 사용 가능하다. 하위클래스에 강제성과 통일성을 줄 수 있다. 단일상속의 단점을 보완할 수 있다. 하위클래스에서는 extends 대신 implements 를 사용한다. 하위클래스에서는 다중 implements 가 가능하다. 용도 기능만을 상위에서 하위클래스로 강제하기 위해 사용한다.
예제 인터페이스 ( interface ) 상위 인터페이스에서 선언한 추상 메소드를 하위 클래스에서 구현. 강제성과 통일성을 준다.
정의 용도 내부 클래스 ( inner class ) 특정 클래스 내부에 또 다른 클래스가 정의되는 것을 의미한다. class Outer { … class Inner { … } 용도 서로 독립적인 관계가 아닌 하나의 멤버처럼 사용될 수 있는 경우. 대표적으로 GUI 와 GUI 이벤트를 구현할 때 사용되어질 수 있다.
특징 종류 내부 클래스 ( inner class ) 내부 클래스는 외부 클래스의 모든 멤버를 자신의 멤버처럼 사용할 수 있다. static내부 클래스를 제외한 다른 모든 내부클래스는 항상 외부 클래스를 이용하여 접근할 수 있다. 종류
member 내부 클래스 구성 내부 클래스 ( inner class ) 외부클래스의 멤버처럼 정의된 클래스. 내부클래스를 생성하려면 먼저 외부클래스를 생성해야 한다. 구성 class Outer { … class Inner { }
내부 클래스 ( inner class ) 예제
local 내부 클래스 구성 내부 클래스 ( inner class ) 외부클래스의 멤버메소드안에서 정의된 클래스. 멤버메소드안에서 내부클래스를 객체생성한다. 멤버메소드의 로컬변수와 같이 동작한다. 메소드 호출시 생성되고 끝나면 소멸한다. 외부클래스의 멤버변수와 상수만 접근가능하다. 구성 class Outer { … public vod methodA() { class Inner { } }//end methodA()
내부 클래스 ( inner class ) 예제
static 내부 클래스 구성 내부 클래스 ( inner class ) 내부클래스내에 static멤버가 있는 경우에 static 내부클래스로 정의한다. 외부클래스의 멤버변수 접근은 불가능하다. 구성 class Outer { … static class Inner { }
내부 클래스 ( inner class )
static을 이용한 Singleton 패턴 추상클래스 interface 내부클래스 요약 정리 static , final static을 이용한 Singleton 패턴 추상클래스 interface 내부클래스