티스토리 뷰

day16 190312


금일은 중첩 클래스와 익명 객체에 대해 배웠습니다.

익명 객체는 웹개발보다는 앱개발(안드로이드) 에서 정말 많이 쓰이는 기능이라고 하시니, 앱개발 분야에 관심이 있으신 분들은

자세히 공부해보시는 걸 추천드리겠습니다.


<중첩클래스>

: 클래스안에 클래스가 중첩되어 있는 형태.

  사용빈도는 낮음.

  하나의 클래스 외에 다른 클래스에서 사용될 일이 없을 때, 그 클래스 안에 클래스를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Outter {
    
    // 인스턴스 멤버 내부 클래스
    // Outter객체가 생성된 다음에만 사용할 수 있는 내부 클래스
    // Outter객체의 모든 멤버(필드, 메소드)를 사용할 수 있다.
    public class Inner1 {
    
    }
    // 정적 멤버 내부 클래스
    // Outter객체 생성없이 사용할 수 있는 내부 클래스
    // Outter의 정적 멤버(정적필드, 정적 메소드)만 사용할 수 있다.
    public static class Inner2 {
    
    }
 
    //
    public void method() {
        // 로컬 내부 클래스
        // 메소드가 실행되는 동안에만 사용할 수 있는 내부 클래스
        // Outter객체의 모든 멤버를 사용할 수 있다.
        // ..
        class Inner3{
        
        }
    }
}
cs


위 Outter클래스를 컴파일하면, 저장 디렉토리에

왼쪽 사진과 같이 class파일이 생긴 것을 볼 수 있다.

Outter클래스(바깥 클래스)파일이 생기고,

멤버내부클래스인 Outter$Inner1.class,

 정적멤버내부클래스인 Outter$Inner2.class,

  로컬내부클래스인 Outter$1Inner3.class

   가 생성이 된다.

로컬내부클래스는 Outter$숫자Inner 형식이 되는 다른 점을 볼 수 있다.

** 로컬내부클래스

-메소드가 실행될 때마다 변수가 생성되고, 변수는 스텍구조로 저장이 된다.

-바깥 클래스의 변수가 복제된다. 스텍 가장 아래 변수가 그 위로 복제된다.

-값은 상수여야 한다. (>> final을 붙여야한다. *java8부터는 생략가능)



<익명 객체>

: 인터페이스나 추상클래스 타입의 객체 생성을 할때, 즉석에서 구현하여 사용하는 객체.

 - 객체 생성 수행문 바로 뒤에 구현부를 만들어준다. 객체명이 없음.

 - 목적 : 한번 사용하고 마는 기능들을 일일이 다 구현되는 것을 방지.

1
2
3
public interface Pen {
    void draw();
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class PenApp {
    public static void main(String[] args) {
        /*
            익명객체
                - 객체 생성할 수 없는 인터페이스/추상클래스를 가지고
                  객체 생성시점에 추상화된 메소드를 즉석에 구현(재정의)해서 객체를
                  객체를 생성한 것
                - 별도의 구현클래스 정의없이 객체 생성이 가능하다.
        */
        Pen redPen = new Pen() {
            // 추상화된 메소드 재정의
            public void draw() {
                System.out.println("빨갛게 그리기...");
            }
        };
        redPen.draw();
 
        Pen bluePen = new Pen() {
            public void draw() {
                System.out.println("파랗게 그리기...");
            }
        };
        bluePen.draw();
    }
}
cs

Pen이라는 인터페이스를 만들고, PenApp을 통해 Pen을 구현하는데 이때, Pen에서 구현되지 않은 메소드들을,

10~15행, 18~22행처럼 즉석에서 구현부를 만들어 익명 객체를 만들고, 16,23행에서 사용한다.



금일예제파일에 좀더 응용된 중첩클래스와 익명객체 예제가 있으니 활용해보시기 바랍니다.

day16.zip



금일 과제>> Member.java / MemberService.java / MemberApp.java

회원정보 등록기능 (문자열)      (나머지 정수형)

- 회원정보 : 회원번호, 이름, 비밀번호, 포인트

로그인 기능

- 회원번호, 비밀번호를 전달받아서 이미 등록된 회원정보와 비교해서 로그인시키는 기능

- 로그인에 성공한 회원만 조회기능, 출력기능을 사용할 수 있다.

로그아웃 기능

-로그인을 해제하는 기능

회원정보 조회기능

- 회원번호를 전달받아서 그 회원번호에 해당하는 회원정보를 제공하는 기능

회원정보 출력기능

- 모든 회원정보를 화면에 출력하는 기능

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함