22
자바 네트워크 프로그래밍 (OCJP 국제공인자격 취득 중심) 충북대학교 최민

자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

자바 네트워크 프로그래밍 (OCJP 국제공인자격 취득 중심)

충북대학교

최민

Page 2: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

2 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Inner Classes 내부 클래스(Inner Class) 클래스 안에 선언된 클래스

다른 클래스의 내부에 선언된 클래스는 외부 클래스(Outer Class)의 멤버를 자유롭게 사용할 수 있음

내부 클래스의 이름은 외부 클래스의 이름과 달라야 함.

내부 클래스를 생성하기 전, 외부 클래스의 instance 생성 내부 클래스는 외부 클래스의 멤버를 사용할 수 있기 때문에

Class Outer{ //멤버변수와 메소드들 Class Inner{ //Inner 클래스의 멤버변수와 메소드들 } }

Page 3: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

3 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Inner Classes 외부 클래스의 인스턴스를 통해서 내부 클래스의 인스턴스를 생성하는 방법

외부 클래스 인스턴스.new 내부 클래스 이름(); new 외부 클래스 이름().new 내부 클래스 이름();

Page 4: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

4 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Inner Classes 내부 클래스의 참조를 선언하는 방법 선언이 이루어지는 위치에 따라 다름. 외부 클래스 내부에서 inner class는 클래스 이름만으로 참조가능 외부 클래스 밖에서는 반드시 외부 클래스를 통해서 참조해야 함!!

case 1의 경우 (1) 번 방식으로 접근

case 2의 경우 (2) 번 방식으로 접근.

내부 클래스 이름 참조; // 1 외부 클래스 이름.내부 클래스 이름 참조; // 2

외부 클래스 인스턴스.new 내부 클래스 이름(); // case 1 new 외부 클래스 이름().new 내부 클래스 이름(); // case 2

Page 5: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

5 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

기본 예제 (case 1) class MyOuter { String className = "MyOuter"; void printInfo(){ System.out.println(className); } class MyInner { String className = "MyInner"; void printInfo(){ System.out.println(className); } } public static void main(String[] args) { MyOuter mo = new MyOuter(); mo.printInfo(); MyInner mi = mo.new MyInner(); mi.printInfo(); } }

먼저 외부 클래스의 인스턴스 mo를 만들고 이 인스턴스를 통해서

mo.new MyInner() 라는 방식으로 내부 클래스를 선언하고 있습니다.

Page 6: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

6 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

예제 설명 출력결과

MyOuter MyInner

Page 7: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

7 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

기본 예제 (case 2) class MyOuter { String className = "MyOuter"; void printInfo(){ System.out.println(className); } class MyInner { String className = "MyInner"; void printInfo(){ System.out.println(className); } } } class MyTest { public static void main(String[] args) { MyOuter mo = new MyOuter(); mo.printInfo(); MyOuter.MyInner mi = new MyOuter().new MyInner(); mi.printInfo(); } }

외부 클래스이름에 .(dot) 를 붙이고 내부 클래스를

가리키고 있음

Page 8: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

8 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

예제 설명 출력 결과 결과는 전 페이지의 예제와 동일하지만 변수선언이 다름

MyOuter MyInner

Page 9: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

9 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

문제 Which statement construct of inner class at //point x? class EnClosingOne{ public class InsideOne{ } } public class InnerTest{ public static void main(String[] args){ EnClosingOne eo = new EnClosingOne(); //point x } } a) InsideOne ei = eo.new InsideOne(); b) EnClosingOne.InsideOne ei = eo.new InsideOne(); c) InsideOne ei = EnClosingOne.new InsideOne(); d) EnClosingOne ei = new eo.InsideOne();

Page 10: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

10 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

실전 문제 Which statement is true? package foo; public class Outer{ public static class Inner{ } } a) An instance of the Inner class can be constructed with "new

Outer().Inner()" b) An instance of the Inner class can't be constructed outside of

package foo. c) An instance of the Inner class can only be constructed from

within the Outer class. d) From within the package bar, an instance of the Inner class

can be constructed statement with "new Inner()"

Page 11: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

11 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

해설 & 답 Inner 클래스는 어떤 클래스의 내부에서 선언되었을 뿐, 다른 클래스들과 마찮가지로 사용할 수 있습니다. 따라서 b) public 으로 선언된 Inner 클래스를 다른 패키지에서는 사용할 수 없다는 것은 틀린 문장입니다. c) 내부 클래스의 인스턴스는 외부 클래스 안에서만 생성될 수 있다는 문장도 틀렸습니다. 외부 클래스 밖에서도 “외부클래스명.내부클래스명” 방식으로 선언해서 사용할 수 있습니다. 내부 클래스가 생성되기 위해서는 반드시 외부 클래스의 인스턴스를 먼저 생성해야 합니다. 따라서 d) 와 달리 new Outer().new Inner() 의 형식이 와야 맞습니다. 내부 클래스를 생성할 때는 반드시 a) 와 같이 외부 클래스 객체를 먼저 생성하고 그 객체를 통해서 내부 클래스를 생성해야합니다. 답은 a) 입니다.

Page 12: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

12 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Gabage Collector Garbage Collection 더이상 참조되지 않는 객체를 메모리 할당 힙(heap)에서 제거 생성된 객체를 더이상 사용하지 않게 되었을 때 메모리에서 제거 한정된 메모리를 효율적으로 사용하기 위함 garbage collector는 자동으로 동작함

Garbage Collection 대상 객체의 참조를 다른 객체의 것으로 바꾸어 버리거나 null 로 만들어 버릴 때

Page 13: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

13 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Gabage Collector gabage collection 프로그래머는 정확히 언제 garbage collection 이 일어나는 지 알 수 없습니다.

하지만, garbage collection 이 일어날 수 있는 시점, 즉 어떤 객체가 더이상 참조되지 않는 시점은 알아두어야 함

class Test { void method() { Test t1 = new Test(); Test t2 = new Test(); t1 = t2; t2 = null; // point x } }

Page 14: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

14 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Gabage Collector Garbage collection 대상이 될 수 있는 객체

t1 객체는 더이상 참조될 수 없기 때문에 // point x 부분에서 garbage collection 대상이 될 수 있는 후보가 됨

가비지 컬렉션 시스템에 요청은 할 수 있음(보장할 수는 없음) 명시적으로 가비지 컬렉션을 요청할 수 있습니다.

System.gc(); 혹은 Runtime.get.Runtime().gc();

Page 15: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

15 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

문제 Which statements about the garbage collection mechanism are

true? a) Garbage collection requires additional program code in cases

where multiple threads are running b) The programmer can indicate that a reference through a local

variable in no longer of interest. c) The programmer has a mechanism that explicitly and

immediately frees that memory used by java object. d) The garbage collection mechanism release memory at

predictable time. e) The garbage collection system never reclaims memory from

object which are still accessible to running user thread

Page 16: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

16 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

문제 public class x{ public Object m(){ Object o = new Float(2.14F); // point x Object oa[] = new Object[1]; oa[0] = o; // point a o = null; // point b return oa[0]; //point c } } When is the Float object created in line “// point x” eligible for garbage

collection? a) just after in // point a b) just after in // point b c) just after in // point c d) never

Page 17: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

17 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

overloading and overriding 오버로딩과 오버라이딩 같은 이름의 메소드를 반복 정의할 수 있는 두가지 방법

자바에서 제공하는 오버로딩과 오버라이딩의 의미와 사용규칙

Page 18: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

18 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

출제 기준 1. 오버로딩 규칙을 알고 올바르게 오버로딩된 메소드를 선별 2. 오버라이딩 규칙을 알고 올바르게 오버라이딩된 메소드를 선별 3. 오버라이드(override)와 오버로드(overload)된 메소드를 이용하는 코드를 작성 상위 클래스의 생성자 또는 오버로드된 생성자를 이용하는 코드를 작성

그러한 메소드를 이용할 때 나타나는 효과를 인지함

4. 오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된 클래스를 구현하는 코드를 작성 가능 5. “is a” 관계와 “has a” 관계를 설명 6. 현재 클래스 및 상위 클래스에 있는 관련 메소드의 선언이 모두 주어졌을 때 메소드의 적절한 리턴형 파악

Page 19: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

19 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

is a/has a 관계 오브젝트 중심 분석 단계 오브젝트 중심 분석/설계시 오브젝트(object)를 찾아낸 다음, 이들 오브젝트간의 관계를 규명

오브젝트간의 관계는 크게 ‘has a’ 관계와 ‘is a’ 관계로 구분 가능

절 차 사례(비디오샵)

1. 프로그램이 처리해야 하는 업무가 일어나는 곳(Mini World)에 존재하는 오브젝트(Object)를 찾아냅니다. 2. 찾아낸 오브젝트(Object)간의 관계를 규명

- Mini World : 비디오샵 - 오브젝트 (Object) : 비디오테이프 , 특별회원, 회원 등 - has a 관계 : ‘회원’은 ‘비디오테이프’를 빌려가서 보관한다.

- is a 관계 : ‘특별회원’도 ‘회원’이다.

Page 20: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

20 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

is a/has a 관계 ‘has a’ 관계 (클래스와 멤버변수 관계) 오브젝트간에 존재하는 물리적인 포함 관계, 또는 특정 오브젝트에 대해서 관리해야 하는 데이터

회원이 소유하는(또는, ‘가지는’) 비디오테이프, 주소 등의 데이터를 관리해야 하는 경우

회원 오브젝트에 대한 클래스 작성시 관리할 데이터를 멤버 변수로 포함.

‘is a’ 관계 (클래스 상속 관계) 오브젝트간에 존재하는 논리적인 포함 관계

일반적인 ‘회원’이 있고, 이 회원과 기본적으로는 동일하지만 관리할 데이터가 추가된 ‘특별회원’이 있을 때

‘특별회원’은 구체적인 오브젝트, ‘회원’은 일반적인 오브젝트로 볼 수 있을 때

Page 21: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

21 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

is a/has a 관계

has a 관계를 적용해서 설계한 GeneralMember 클래스

class GeneralMember { String name; String address; Video video; // Video 클래스는 별도로 작성해야 함.

}

is a 관계를 적용해서 설계한 SpecialMember 클래스

class SpecialMember extends GeneralMember { int bonusPoint; // 추가로 관리해야 하는 데이터 // 기타 변수 그대로 이용

}

Page 22: 자바 네트워크 프로그래밍 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/choimin/7.pdf오브젝트 중심 디자인에서 캡슐화의 이점을 알고, 완전히 캡슐화된

22 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

기본 예제 (has-a 관계) 비디오샵에서 회원이 비디오테이프를 대여한 경우 이 관계(has a 관계)를 GeneralMember 클래스에 Video 클래스형 멤버 변수로 표현

public class VideoShop { public static void main(String[ ] args) { Video v = new Video( ); v.setVideoData(100, “터미네이터 2”, “아놀드”); GeneralMember m = new GeneralMember( ); m.setMemberData(1, "허영석", "광진구 능동 123번지", v); m.printMemberData( ); } }