JAVA 9강_4_Inner

열라뽕따히·2024년 2월 25일

JAVA

목록 보기
58/79

다양한 형태의 클래스 선언 방법

1. 일반적인 선언 방법
==> 하나의 java 파일에 class 키워드를 작성하여 클래스 선언

2. 무명 클래스(anonymouns class) 선언
==> 이름이 없는 클래스 선언. interface를 객체 생성 시 많이 사용이 됨

3. 중첩 클래스(inner class) 선언
==> 클래스 안에 또 다른 클래스 선언

  • 두 클래스가 서로 긴밀한 관계로 연결되어 있는 경우에 사용함
  • 두 클래스 멤버 간에 서로 쉽게 접근할 수 있다는 장점이 있음
  • 내부 클래스를 하나의 멤버로 사용할 수 있음
  • 클래스 멤버 : 멤버변수, 멤버메서드, 외부 클래스, 내부 클래스
  • 내부 클래스 객체 생성 방법
    형식)
    외부클래스명.내부클래스명 참조변수 = 외부클래스 참조변수.new 내부클래스 생성자();

[내부 클래스의 특징]

  • 내부 클래스는 외부 클래스의 멤버를 마치 자기 자신처럼 사용이 가능함
    ==> 외부 클래스 멤버의 데이터를 변경 시킬 수도 있음
  • 외부 클래스의 접근지정자가 private 접근지정자 일지라도 접근이 가능함
  • 내부 클래스의 접근은 반드시 외부 클래스를 통하여 접근해야 함




<예시>

추상메서드를 만들 인터페이스 Inter클래스 생성



=============================코드=============================

public interface Inter {
	
	// 추상메서드
	int sum(int n1, int n2);
	
	int minus(int n1, int n2);
	
}

Inter 인터페이스 클래스를 구현할 Sub클래스 생성



=============================코드=============================

public class Sub implements Inter {

	@Override
	public int sum(int n1, int n2) {
		
		return n1 + n2;
	}

	@Override
	public int minus(int n1, int n2) {
		
		return n1 - n2;
	}

}d




일반적인 선언 방법과 무명클래스 선언을 활용하여 메인메서드에 출력할 Inter_01 클래스를 생성




=============================코드=============================

public static void main(String[] args) {
		
		// 1. 일반적인 객체 생성 선언 방법
		Sub sub = new Sub();
		
		System.out.println("sum() 메서드 호출 >>> " + sub.sum(200, 36));
		
		System.out.println("minus() 메서드 호출 >>> " + sub.minus(200, 36));
		
		// 2. 무명 클래스(anonymous class) 선언
		Inter inter = new Inter() {
			
			@Override
			public int sum(int n1, int n2) {
				
				return n1 + n2;
			}
			
			@Override
			public int minus(int n1, int n2) {
				// TODO Auto-generated method stub
				return n1 - n2;
			}
		};
		
		System.out.println("interface sum() >>> " + inter.sum(300, 237));
		
		System.out.println("interface minus() >>> " + inter.minus(500, 238));

	}

=============================실행=============================






이번에는 중첩 클래스의 선언 방법에 대해 알아보자

Outer 외부 클래스와 Inner 내부 클래스 생성 후 내부 클래스에 메서드로 output() 호출



=============================코드=============================

class Outer {   // 외부 클래스
	
	final int su1 = 50;    // final로 선언 시 상수가 되어 값 변경이 불가능!
	private int su2 = 33;
	
	class Inner {   // 내부 클래스
		
		void output() {
			//su1 = 137;  ==> 값을 넣을 시 변경된 값이 출력 됨 (단, final 선언 시 값 변경 x)
			su2 = 133;  // 외부 클래스에 su2를 private으로 선언해도 접근이 가능하다!(긴밀한 관계이기 때문)
			
			System.out.println("su1 >>> " + su1);
			System.out.println("su2 >>> " + su2);
		}
		
	}  // Inner class end
	
}  // Outer class end

public class Inner_02 {

	public static void main(String[] args) {
		
		// 중첩 클래스 객체 생성 방법
		// 1. 외부 클래스 객체가 먼저 생성이 되어야 함
		Outer outer = new Outer();
		
		// 2. 내부 클래스 객체 생성
		// 형식) 외부클래스명.내부클래스명 참조변수 = 외부클래스 참조변수.new 내부클래스 생성자();
		Outer.Inner inner = outer.new Inner();
		inner.output();

	}

}

=============================실행=============================

0개의 댓글