Day17 :) 내부클래스1 - 인스턴스, 스태틱, 로컬

Nux·2021년 9월 27일
0

자바웹개발

목록 보기
17/105
post-thumbnail

내부클래스

class A{		// 외부클래스
	class B{}	// 내부클래스
}
  • 클래스 내에 선언된 또 다른 클래스
  • 내부클래스를 선언하면 두 클래스 멤버들 간 접근이 용이해짐
  • 코드를 간단하게 만들 수 있음
  • 내부클래스(B)는 외부클래스(A)를 제외하고는 잘 사용되지 않아야함

내부클래스 종류와 특징

  • 변수 선언위치에 따른 종류와 같음(인스턴스, 스태틱, 로컬, 익명)

인스턴스내부클래스

  • 외부 클래스의 멤버변수 위치에 선언
  • 보편적으로 사용됨
  • 인스턴스 변수/메서드, 스태틱 변수/메서드 전부 사용 가능
public class Outer{
	int x, y;
    public void InstanceInner(){}
}    

스태틱내부클래스

  • 외부클래스의 멤버변수 위치에 선언
  • 스태틱변수, 스태틱메서드만 다룰 수 있음
public class Outer{
	int x,y;
    static int z;
    public static void StaticInner(){}
}

로컬내부클래스

  • 외부클래스의 메서드나 초기화 블럭 안에 선언
  • 해당 영역 실행 중에만 사용 가능
  • 외부클래스의 모든 구성요소를 자유롭게 사용 가능
public class Outer{
	int x,y;
    public void sample(){
    	class LocalInner{
        	int a,b;
        }
    }
}

내부클래스의 선언

  • 내부클래스는 선언 위치에 따라 같은 속성의 변수와 동일한 유효범위와 접근성을 가짐
1. 변수
class Outer{
	int iv = 0;
    static int cv = 0;
    void myMethod(){
    	int lv = 0;
    }

2. 내부클래스
class Outer{
	class InstanceInner{}
    static class StaticInner{}
    void myMethod(){
    	class LocalInner{}
    }
  • 제3의 클래스에서 내부클래스를 사용 할 때
    • 인스턴스클래스: 외부클래스로 객체 생성이 선행되어야 함
    • 스태틱클래스: 객체 생성없이 바로 호출 가능
class Outer{
	class Ins{}
   	static class stat{}
}    
class Outer2{
	Outer o = new Outer();
    Outer.Ins ins = o.new Ins();	// 인스턴스 클래스. 객체생성 선행
    
    Outer.Stat stat = new Outer.stat();	// 스태틱클래스. 객체생성X

내부클래스는 되도록 하나의 클래스에서 문제를 해결하기 위하여 만드는 것이므로
이런식으로 따로 클래스를 벗어나는 것은 적절하지 못하므로 참고만 할 것

0개의 댓글