JAV) 0407-1 내부클래스

조한미르·2024년 4월 7일
0
  • 내부클래스

    	- 내부클래스는 클래스 안에 만들어진 또 다른 클래스로 중첩 클래스라고도 부름.
        -클래스에 또 다른 클래스를 선언하는 이유는 두개의 클래스가 서로 긴밀한 관계를 맺고있기 때문에
    • 장점
      • 두클래스 멤버들 간에 손쉽게 접근할 수 있다.
      • 불필한 클래스를 감춰서 코드의 복잡성을 줄일 수 있다.
    • 내부클래스 종류)
      • 인스턴스 클래스(멤버 클래스)
      • 정적 클래스
      • 지역 클래스

인스턴스 클래스 선언)

public class Outer { 
	private String name;   ---> 인스턴스멤버.
    //...

public class Inner { 
	private String name;     ------> 인스턴스 클래스
    //...
	}
}

인스턴스 클래스 예시)

  • Calculator
  public class Calculator {

      private int val1;
      private int val2;

      public Calculator(int val1, int val2) {
          this.val1 = val1;
          this.val2 = val2;
      }


      //내부클래스 - 인스턴스클래스 선언
      //인스턴스 클래스는 외부클래스의 변수/메서드 사용가능
      public class Calc {
          public int add() {
              return val1 + val2;
          }
       }
   }
  • CalcMain
   public class CalcMain {

      public static void main (String[] args) {

          Calculator cal = new Calculator(12, 20);
          //내부클래스 선언 
          Calculator.Calc calc = cal.new Calc();
          //내부클래스 메서드 실헹
          System.out.println("더하기 값 : " + calc.add());
      }

    }

-> 더합기 값 : 32

정적 내부 클래스 선언)

    public class Outer {
      private String name;   -----> 인스턴스 멤버

      public static class Inner {
          private String name;      ----> 정적내부클래스
          //...
      }
    }

정적 내부클래스 예시)

  • PrintOut
    public class PrintOut {

      //정적 클래스 선언
      public static class  Out {
          public  void println(String str) {
              System.out.println(str);
          }
      }

      public static void main(String[] args) {

          PrintOut.Out out = new PrintOut.Out();
          String  str = "정적내부클래스"

          out.println(str);

      }
  }

-> 정적내부클래스

  • 정적 메서드 또는 클래스는 내부에서 멤버 변수 / 인스턴스 호출 X

지역클래스 선언)

    public class Local class {

        //...
       public void print () {
            //...
          class A {  ---------->지역클래스 선언
            //...
          }

          A a = new A(); -----------> 메서드 내에서 사용
       }
    }

지역클래스 예시)

  • Unit
  public class Unit {
      private int speed = 10;

      public void getUnit(String type, String unitName) {

          class Tank{
              public void move() {
                  System.out.println(unitName + " 이(가) " + speed + " 속도로 이동.");
              }
           }
          class Ship{
              public void move() {
                  System.out.println(unitName + " 이(가) " + speed + " 속도로 이동.");
              }
           }


           Tank t = null;
           Ship s = null;

           if(type.equals("ship")) {
              s = new Ship();
              s.move();
           }else if(type.equals("tank")) {
              t = new Tank();
              t.move();
           }

   }
  • UnitMain
     public class UnitMain {

        public static void main(String[] args) {

            Unit unit = new Unit();
            unit.getUnit("tank", "K9");
        }
    }

-> k9이(가) 10 속도로 이동.

profile
꼭 해내는 사람

0개의 댓글