자바스터디(6기) 4

875 views

Published on

난 정말 자바를 공부한 적이 없다구요(윤성우)

chapter 17 abstract와 interface 그리고 inner class

OpenOffice에서 작성

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
875
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

자바스터디(6기) 4

  1. 1. JAVA STUDY chapter17 abstract 와 interface 그리고 inner class 2011. 10. 9 이진아
  2. 2. 추상클래스 abstract <ul><li>모든 클래스가 인스턴스를 만들기 위한 틀 ? </li></ul><ul><li>상속만을 위한 클래스 : 추상클래스 </li></ul><ul><li>new 키워드를 이용해 인스턴스 생성 불가 </li></ul><ul><li>참조변수의 선언만 가능 </li></ul><ul><li>선언하기 전에 비해 안전성이 높아지고 </li></ul><ul><li>시스템적으로 오류 확인 가능 </li></ul>/24
  3. 3. 추상클래스 abstract /24 <ul><li>abstract class AbClass1{ </li></ul><ul><ul><li>public void abMethod1(){ </li></ul></ul><ul><ul><ul><li>System.out.println(&quot; 안녕하세요 &quot;); </li></ul></ul></ul><ul><ul><ul><li>} } </li></ul></ul></ul><ul><li>abstract class abClass2{ </li></ul><ul><ul><li>public abstract void abClass2(); </li></ul></ul><ul><li>} </li></ul>추상클래스의 조건 1. 클래스에 abstract 선언 2. 추상메소드 ( 불완전한 메소드 ) 가 있으면 반드시 메소드와 클래스 모두 abstract 선언해야 함
  4. 4. 추상클래스 abstract <ul><li>추상클래스를 상속하는 하위클래스에서는 추상 메소드를 반드시 오버라이딩 해야 함 </li></ul>/24 <ul><li>abstract class abClass2{ </li></ul><ul><ul><li>public abstract void abClass2(); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>class Bclass extends abClass2 { </li></ul><ul><ul><li>public void abClass2() { </li></ul></ul><ul><ul><ul><li>System.out.println(&quot; 안녕하세요 &quot;); </li></ul></ul></ul><ul><ul><li>} } </li></ul></ul>
  5. 5. 인터페이스 interface <ul><li>100% 추상클래스 </li></ul><ul><li>무조건 메소드는 public abstract </li></ul><ul><li>변수는 public static final 로 선언 ( 상수화 ) </li></ul><ul><li>추상클래스에 비해 선언문이 간결해짐 </li></ul><ul><li>추상클래스와 유사점 </li></ul><ul><li>인터페이스간 상속 가능 (extends) </li></ul>/24
  6. 6. 인터페이스 interface /24 인터페이스 조건 1. class 대신에 interface 2. extends 대신에 implements 3. 추상메소드를 반드시 오버라이딩 <ul><li>public interface InterfaceA{ </li></ul><ul><ul><li>public abstract void inteMethod(); //public abstract 생략가능 </li></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>class ClassB implements InterfaceA { </li></ul><ul><ul><li>public void inteMethod() { </li></ul></ul><ul><ul><ul><li>System.out.println(&quot; 안녕하세요 &quot;); </li></ul></ul></ul><ul><ul><ul><li>} } </li></ul></ul></ul>
  7. 7. 인터페이스 interface /24 인터페이스 특징 1. 다중 상속 효과 (1) public interface InterfaceA{ void inteMethodA(); } public interface InterfaceB{ void inteMethodB(); } class ClassB implements InterfaceA, InterfaceB { public void inteMethodA() { System.out.println(&quot; 안녕하세요 &quot;);} inteMethodB() { System.out.println(&quot; 안녕히가세요 &quot;);} }
  8. 8. 인터페이스 interface /24 인터페이스 특징 1. 다중 상속 효과 (2) public interface InterfaceA{ void inteMethodA(); } abstract Class ClassA{ public abstract void claMethodA(); } class ClassB extends ClassA implements InterfaceA { puvlic void inteMethodA() { System.out.println(&quot; 안녕하세요 &quot;);} public void claMethodA() { System.out.println(&quot; 안녕히가세요 &quot;);} }
  9. 9. 인터페이스 interface /24 인터페이스 특징 2. 상수 표현 <ul><li>public interface Week{ </li></ul><ul><li>int MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7; </li></ul><ul><li>} </li></ul><ul><li>.... </li></ul><ul><li>switch(sel) </li></ul><ul><li>{ </li></ul><ul><li>case Week.SUN : </li></ul><ul><ul><ul><li>System.out.println(&quot; 일요일에는 스터디가 있습니다 .&quot;); </li></ul></ul></ul><ul><li>} </li></ul>
  10. 10. 인터페이스 interface /24 인터페이스 특징 3. 클래스의 정의에 약속된 형태를 표시 ( 예 , 대문자표시 ) <ul><li>public interface UpperCasePrintable{ } // 비어있음 </li></ul><ul><li>class ClassPrinter{ </li></ul><ul><li>public static void print(Object obj) </li></ul><ul><li>{ String org=obj.toString(); </li></ul><ul><li>if( obj instanceof UpperCasePrintable ) </li></ul><ul><li>{org=org.toUpperCase();} </li></ul><ul><li>System.out.println(org);} </li></ul><ul><li>class PointOne implements UpperCasePrintable { </li></ul><ul><ul><ul><li>System.out.println(&quot;aaa”);} </li></ul></ul></ul>
  11. 11. 추상클래스 도식 /24
  12. 12. 인터페이스 도식 /24
  13. 13. 추상클래스와 인터페이스 <ul><li>어떤 때 하위 / 추상 클래스를 만들고 인터페이스를 만들까 ? </li></ul><ul><li>1. IS-A 관계가 아닐 때 그냥 클래스를 만든다 . </li></ul><ul><li>2. 기존의 클래스에서 구체적인 버전을 만들 필요가 있다면 하위클래스를 만든다 . </li></ul><ul><li>3. 하위클래스에서 사용할 틀을 정의하고 공통적으로 사용할 코드가 있다면 추상클래스를 만든다 . </li></ul><ul><li>4. 상속의 위치와 상관 없이 클래스의 역할을 정의하고 싶다면 인터페이스를 만든다 . </li></ul>/24
  14. 14. Inner 클래스 <ul><li>클래스 (Outer) 안의 클래스 (Inner) </li></ul><ul><li>static 으로 선언된 inner 클래스는 Nested </li></ul><ul><li>private 로 선언된 Nested 클래스는 Outer 클래스에서만 인스턴스 생성 가능 </li></ul><ul><li>클래스를 논리적으로 묶는 수단 </li></ul><ul><li>캡슐화 증가 효과 </li></ul><ul><li>코드 가독성 향상 , 유지보수성 증가 </li></ul>/24
  15. 15. Inner 클래스 /24 Inner 클래스 특징 1. Outer 클래스 인스턴스 생성 후에 Inner 클래스 인스턴스 생성 가능 class OuterClass{ class InnerClass{ InnerClass(){System.out.println(&quot; 이너 클래스 &quot;);} } } .... OuterClass out = new OuterClass(); OuterClass.InnerClass inn = out.new InnerClass(); inn.InnerClass();
  16. 16. Inner 클래스 /24 Inner 클래스 특징 2. Inner 클래스 내에서는 Outer 클래스 멤버에 직접 접근 가능 class OuterClass{ int outNum=10; class InnerClass{ InnerClass(){ System.out.println(&quot;outer 클래스 : &quot;+ outNum );} } } }
  17. 17. Inner 클래스 /24 Inner 클래스 특징 3. Inner 클래스 인스턴스는 자신이 속할 Outer 클래스 인스턴스를 기반으로 생성 class OuterClass{ class InnerClass{ InnerClass(){System.out.println(&quot; 이너 클래스 &quot;);} } } .... OuterClass out1 = new OuterClass(); OuterClass out2 = new OuterClass(); OuterClass.InnerClass inn1 = out1 .new InnerClass(); OuterClass.InnerClass inn2 = out1 .new InnerClass(); OuterClass.InnerClass inn3 = out2 .new InnerClass();
  18. 18. 지역 (Local) 클래스 <ul><li>메소드 안의 클래스 </li></ul><ul><li>정의된 메소드 내에서만 인스턴스 생성과 참조변수 선언 가능 </li></ul><ul><li>메소드 안의 클래스에서 반환된 값은 메소드 안에서만 유효한데 어떻게 접근하나 ? </li></ul><ul><li>- 보통 인터페이스와 함께 정의 </li></ul><ul><li>- 메소드의 final 로 선언된 매개변수와 지역변수에만 접근 가능 </li></ul>/24
  19. 19. 지역 (Local) 클래스 /24 Local 클래스 특징 인터페이스와 함께 정의 public interface Readable{ public void read(); } class OuterClass{ public Readable createLocalClassInst(){ class LocalClass implements Readble{ public void read() {System.out.println(&quot; 지역 클래스다 !&quot;);} } return new LocalClass; } .... OuterClass out new OuterClass(); Readable localInst=out.createLocalClassInst(); loclInst. read();
  20. 20. 지역 (Local) 클래스 /24 Local 클래스 특징 final 로 정의된 매개변수와 지역변수에 접근 public interface Readable{ public void read(); } class OuterClass{ public Readable createLocalClassInst( final int istID ){ class LocalClass implements Readble{ public void read() {System.out.println( instID );} } return new LocalClass;} .... OuterClass out new OuterClass(); Readable localInst=out.createLocalClassInst( 1234 ); loclInst.read();
  21. 21. 익명 (Anonymous) 클래스 <ul><li>이름이 없는 클래스 </li></ul><ul><li>인터페이스에 메소드의 몸체를 채워넣는 방식의 인스턴스 생성 </li></ul><ul><li>생성자가 없음 </li></ul>/24
  22. 22. 익명 (Anonymous) 클래스 /24 Anonymous 클래스 생성 return new Readable(){ }; Readable read = new Readable() public interface Readable { public void read(); } class OuterClass{ public Readable createLocalClassInst(final int istID){ return new Readable(){ public void read() {System.out.println(instID);} }; } }
  23. 23. 생각해보고 싶은 점 <ul><li>1. Inner 클래스 </li></ul><ul><li>- 유지보수성이 증가한다는 것의 의미는 ? </li></ul><ul><li>2. Local/Anonymous 클래스 </li></ul><ul><li>- 왜 메소드 안에 클래스를 만들까 ? </li></ul><ul><li>- Local 과 Anonymous 의 차이점은 ? </li></ul>/24
  24. 24. 참고자료 <ul><li>난 정말 JAVA 를 공부한 적이 없다구요 ( 오렌지미디어 ) </li></ul><ul><li>Head First JAVA(O’REILLY) </li></ul>/24

×