본문 바로가기
Programming/Java

자바의 내부 클래스

by vita12321 2023. 8. 1.
728x90
반응형

자바의 내부 클래스(Inner Class) 다른 클래스 내부에서 선언된 클래스입니다. 클래스 내부에 선언된 클래스는 해당 클래스의 책임을 올바르게 표현하는데 유용하며, 코드의 가독성과 캡슐화를 높이는데 도움이 됩니다. 이번 글에서는 자바의 내부 클래스에 대해 자세히 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.


 

1. 내부 클래스의 개념 종류

 

내부 클래스는 클래스 내부에 선언된 클래스로 캡슐화를 강화하고 코드를 더욱 모듈화합니다. 자바에서는 다음과 같은 가지 종류의 내부 클래스를 제공합니다.

 

  • 인스턴스 내부 클래스
    클래스안에서 일반적으로 선언되는 내부 클래스입니다. 외부 클래스의 인스턴스 변수에 접근할 수 있으며 외부 클래스와 밀접한 관계를 갖습니다.

  • 정적(static) 내부 클래스
    내부 클래스에 static을 선언한 내부 클래스입니다. 외부 클래스의 static 변수에만 접근할 수 있으며 독립적으로 동작합니다.

  • 지역(Local) 내부 클래스
    메서드 내부에서 선언되어 해당 메서드 내에서만 사용 가능한 클래스입니다.

  • 익명(Anonymous) 내부 클래스
    클래스의 이름이 없는 클래스로, 클래스 선언과 동시에 객체를 생성하며, 주로 이벤트 리스너, 컬렉션 프로세싱 등 작업을 수행할 때 사용됩니다.

 

2. 자바 내부 클래스 구현 사용

 

자바 내부 클래스를 구현하고 사용하기 위해서는 다음과 같은 과정들을 거칩니다.

 

  • 클래스에 내부 클래스 선언
  • 내부 클래스 사용

 

예제로 설명하면 아래와 같습니다.

// 외부 클래스 정의

class OuterClass {

    private String outerString = "Outer String";

 

    // 인스턴스 내부 클래스 정의

    class InnerClass {

        public void printOuterString() {

            System.out.println(outerString); // 외부 클래스의 private 변수에 접근 가능

        }

    }

 

    // 외부 클래스 메서드에서 내부 클래스 사용

    public void callInnerClass() {

        InnerClass innerClass = new InnerClass();

        innerClass.printOuterString();

    }

}

public class Main {

    public static void main(String[] args) {

        OuterClass outerClass = new OuterClass();

        outerClass.callInnerClass(); // "Outer String" 출력

    }

}

 

위의 예제에서 OuterClass 외부 클래스이며, InnerClass 인스턴스 내부 클래스입니다. InnerClass 객체는 외부 클래스의 private 변수에도 접근할 있습니다.


 

3. 내부 클래스 예제

 

주문 정책을 나타내는 클래스를 정의하고, 주문 정책에 따른 할인율을 출력하는 내부 클래스를 구현해보겠습니다.

 

// 외부 클래스 정의

class OrderPolicy {

    private String policyName;

    private double baseDiscountRate;

 

    public OrderPolicy(String policyName, double baseDiscountRate) {

        this.policyName = policyName;

        this.baseDiscountRate = baseDiscountRate;

    }

 

    // 정적 내부 클래스 정의

    static class Discount {

        public static double apply(double rate) {

            return rate * 0.01;

        }

    }

 

    // 외부 클래스에서 내부 클래스 사용

    public void printDiscountRate() {

        double discountRate = Discount.apply(baseDiscountRate);

        System.out.println(policyName + " 주문 정책에 따른 할인율: " + discountRate);

    }

}

public class Main {

    public static void main(String[] args) {

        OrderPolicy goldPolicy = new OrderPolicy("Gold", 10.0);

        goldPolicy.printDiscountRate(); // "Gold 주문 정책에 따른 할인율: 0.1" 출력

    }

}

 

자바 내부 클래스를 통해 클래스의 책임을 더욱 명확하게 표현할 있으며, 코드의 가독성과 재사용성을 향상시킬 있습니다.

728x90
반응형

'Programming > Java' 카테고리의 다른 글

자바의 예외 처리  (0) 2023.08.03
자바의 입출력  (0) 2023.08.02
자바의 인터페이스  (0) 2023.07.31
자바의 추상 클래스  (0) 2023.07.30
자바의 다형성  (0) 2023.07.29