• 회원가입
  • 로그인
  • 구글아이디로 로그인

[class] Java - Inner Classes (내부 클래스)

957  
목차
  1. 내부클래스 정의
  2. private 내부클래스
  3. static 내부클래스
  4. 내부클래스에서 외부클래스에 접근

 

내부클래스 정의

 

클래스 안에 클래스 선언.

※ 중첩적인 클래스 구조.

 


[장점]

 

1. 

내부클래스에서 외부클래스의 멤버에 쉽게 접근.

※ 대등 구조의 클래스 경우, 외부클래스로 객체 생성해야 접근 가능.

 

2. 

코드 복잡성 감소. (= 캡슐화)

※ 특정 클래스 관련 작업 경우, 외부 비노출이 효율적.

 


[예제]

 

1.

C:\Users\사용자명\Hz.java 생성.

 

class Out {

  int x = 3;

  class In {

    int y = 4;

  }

}


public class Hz {

  public static void main(String[] args) {

    Out out = new Out();

    Out.In in = out.new In();

    System.out.println(in.y + out.x);

  }

}

 

2.

Hz.java 컴파일.

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

 

3. 

Hz 클래스 실행.

C:\Users\aspire>java Hz

 

결과값: 7

 

private 내부클래스

 

1.

일반 클래스와 달리,

내부 클래스는 private 또는 protected 가능.

 

2.

외부 객체가 내부 클래스에 접근 원치 않을 경우,

내부 클래스를 private 선언. (※ 아래 예제 참고)

 


[예제]

 

1.

C:\Users\사용자명\Hz.java 생성.

 

class Out {

  int x = 3;

  private class In { // 외부에서 접근 차단.

    int y = 4;

  }

}


public class Hz {

  public static void main(String[] args) {

    Out out = new Out();

    Out.In in = out.new In(); // 외부에서 접근 시도 시, 에러 발생.

    System.out.println(in.y + out.x);

  }

}

 

2.

Hz.java 컴파일. ※ 에러 발생.

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

 

결과값:

Hz.java:12: error: Out.In has private access in Out

    Out.In in = out.new In();

       ^

Hz.java:12: error: Out.In has private access in Out

    Out.In in = out.new In();

                        ^

2 errors

 

static 내부클래스

 

내부 클래스를 static 선언 시,

외부 클래스의 객체 생성 없이 바로 외부 클래스 멤버에 접근 가능.

 

 

[참고]

static (속성・메서드)와 마찬가지로,

static 내부 클래스는 외부 클래스의 멤버에 접근 불가.

 


[예제]

 

1.

C:\Users\사용자명\Hz.java 생성.

 

class Out {

  int x = 3;

  static class In {

    int y = 4;

  }

}


public class Hz {

  public static void main(String[] args) {    

    Out out = new Out();

    Out.In in = new Out.In(); // 맨 처음 예제와 차이 비교.

    System.out.println(in.y + out.x);

  }

}

 

2.

Hz.java 컴파일.

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

 

3. 

Hz 클래스 실행.

C:\Users\aspire>java Hz

 

결과값: 7

 

내부클래스에서 외부클래스에 접근

 

내부 클래스는 외부 클래스의 (속성/메서드)에 쉽게 접근 가능.

 


[예제] 외부클래스의 속성값을 내부클래스에서 바로 사용.

 

1.

C:\Users\사용자명\Hz.java 생성.

 

class Out {

  int x = 5; 

  class In {

    public int inMethod() {

      return x;

    }

  }

}


public class Hz {

  public static void main(String[] args) {

    Out out = new Out();

    Out.In in = out.new In();

    System.out.println(in.inMethod());

  }

}

 

2.

Hz.java 컴파일.

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

 

3. 

Hz 클래스 실행.

C:\Users\aspire>java Hz

 

결과값: 5



분류 제목
String Java - equals() 메서드 -두 문자열의 동일 여부 비교.
String Java - equalsIgnoreCase() 메서드 - 대소문자 구별 없이 문자열 동일 여부 비교.
String Java - format() 메서드 ★★★ - 문자열 포맷 (= format메서드 = 포맷 메서드)
String Java - getBytes() 메서드 - 문자열의 바이트(byte) 배열 반환 (= getBytes메서드 …
String Java - getChars() 메서드 - 문자열에서 문자 배열로 단일문자를 복사.
String Java - hashCode() 메서드 - 문자열의 해시코드 반환 (= hashCode메서드 = 해시코드메서…
String Java - indexOf() 메서드 - 문자열에서 지정 문자의 처음 발견 위치의 색인번호 반환
String Java - intern() 메서드 △ - 지정 색인부터 검색 시작해, 지정 문자가 처음 나타나는 색인 반…
String Java - isEmpty() 메서드 - 빈 문자열인지 여부 체크 (= isEmpty메서드 = 이즈엠프티메서…
String Java - lastIndexOf() 메서드 - 지정 문자가 문자열에서 마지막 나타난 위치의 색인번호 반환.
String Java - length() 메서드 - 문자열 길이 (= length메서드 = 렝스메서드)
String Java - matches() 메서드 △ - 정규식과 일치하는 문자열 검색 후 일치 항목 반환.
String Java - offsetByCodePoints() 메서드 △ - 지정 인덱스에서 codePointOffset…
String Java - regionMatches() 메서드 △ - 두 문자열 영역이 같은지 테스트.
String Java - replace() 메서드 - 문자열의 특정 문자를 지정 문자로 대체. (= replace메서드 …
String Java - replaceFirst() 메서드 △ - 지정 정규식과 일치하는 첫 번째 하위 문자열을 새 지정…
String Java - replaceAll() 메서드 △ - 지정 정규식과 일치하는 모든 하위 문자열을 새 지정대로 대…
String Java - split() 메서드 △ - 문자열을 부분 문자열의 배열로 분할.
String Java - startsWith() 메서드 - 문자열이 지정 단일문자(들)로 시작하는지 체크.
String Java - subSequence() 메서드 △ - 하위 시퀀스 반환
7/10
목록
찾아주셔서 감사합니다. Since 2012