📝 TIL

[TIL] Java 인터페이스, 내부클래스, 예외처리

오늘 ONEUL 2022. 5. 20. 21:34

✍ Today I Learned

[클래스 다시 짚고 넘어가기]

  • 클래스는 개념을 코드로 작성한 것이다.
  • 개념은 정적인 것과 동적인 것으로 구분된다.
  • 정적인 것은 특정 시점의 상태 값이다.
  • 동적인 것은 상태 값을 변경하는 기능이다.
  • 생성자는 클래스를 사용하기 위한 출입구이다.
  • 생성자를 통해서 클래스가 보유한 모든 리소스에 접근한다.
  • 클래스의 변수와 메서드는 특정 목적을 위해 설계된 리소스이다.
  • 클래스는 new 연산자와 생성자를 통해 물리적으로 인스턴스가 된다.
  • 인스턴스란 메모리상에 주소 값을 갖는 데이터이다.
  • 모든 리소스의 접근은 인스턴스의 주소 값으로부터 시작한다.
  • 데이터의 인풋(파라미터)과 아웃풋(리턴)의 이해를 해보자!
  • 클래스를 생성할 땐 어떤 값이 필요하고, 무엇을 위해 변경할 건지 생각하자!

 

[추상 메서드의 한계]

  • 추상 클래스는 클래스의 특징을 가지므로 단일 상속만 가능하다.
  • 추상 클래스 내부에 추상 메서드와 일반 메서드 모두 존재하므로 개념이 모호하다.
  • 인스턴스로 만들지 못한다면 굳이 일반 클래스의 속성을 따를 필요가 있을까?

 

[인터페이스 Interface]

  • 인터페이스(interface)란? 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미한다.
  • 자바에서는 클래스를 통한 다중 상속은 지원하지 않고, 인터페이스를 통해 다중 상속을 지원하고 있다.
  • interface 키워드를 사용하여 선언하고, implements 키워드를 사용하여 구현한다.
  • 추상 클래스는 추상 메서드뿐만 아니라 생성자, 필드, 일반 메서드도 포함할 수 있지만, 인터페이스는 오로지 추상 메서드(public abstract)와 상수(public static final)만을 포함할 수 있다.
  • 추상 클래스와 마찬가지로 인스턴스를 생성할 수 없다.
  • 인터페이스 extends 인터페이스처럼 인터페이스들 간의 상속도 가능하다.
  • 인터페이스에 제시된 규격에 따라 클래스가 구체화된 객체로 만들어진다.
  • 추상을 왜 할까?
    • 개념을 더 명확히 하기 위해서이다.
  • 인터페이스는 왜 변수 사용이 안될까?
    • 규격이기 때문에 변하면 안 된다.
    • 그래서 추상 메서드와 상수(final)만 가능하다.
  • 인터페이스의 장점은?
    • 프로젝트의 규모가 클 때, 일관되고 정형화된 개발을 위한 표준화가 가능하다.
    • 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있어 개발 시간이 단축된다.
    • 클래스의 관계를 인터페이스로 연결하면 클래스마다 독립적인 프로그래밍이 가능하다.
  • 인터페이스와 추상 클래스의 차이점?

추상클래스 VS 인터페이스 도식화 (출처:마이자몽)

 

[내부 클래스 Inner Class]

  • 내부 클래스(inner class)란? 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 외부 클래스와 긴밀한 관계를 맺고 있을 때 선언할 수 있다.
  • 내부 클래스의 장점은?
    • 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다.
    • 서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가시킨다.
    • 외부에서는 내부 클래스에 접근할 수 없으므로, 코드의 복잡성을 줄일 수 있다.
  • 내부 클래스를 언제 사용할까?
    • 내부 정보 값이 절대 외부에 노출되면 안 될 때
    • 연쇄적인 호출이 일어나야 할 때

 

[익명 클래스 Anonymous Class]

  • 익명 클래스(anonymous class)란? 다른 내부 클래스와 달리 이름을 가지지 않는 클래스를 의미한다.
  • 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성하는 일회용 클래스이다. 따라서 생성자를 선언할 수 없다.
  • 매우 제한적인 용도에 사용되며, 구현해야 하는 메서드가 매우 적은 클래스를 구현할 때 사용된다.