본문 바로가기

Programming/JAVA

(139)
중첩 클래스&인터페이스(3) - 중첩 클래스의 접근 제한자 3 : 로컬 클래스 ○ 로컬 클래스에서의 사용 제한 로컬 클래스에서의 여러 멤버들의 사용 제한 규칙에 대해서 살펴보겠습니다. 우선 로컬 클래스에서의 규칙과 관련해서는 인스턴스 멤버 클래스에 비해서 복잡한 내용이 많으니, 잊지 말고 로컬 클래스의 개념에 대해서 다시 한번 짚고 넘어가 보도록 하겠습니다. 중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 2 : 정적 멤버 / 로컬 클래스 앞서서 우리는 살펴본 중첩 클래스의 분류 중, 멤버 클래스의 한 종류인 인스턴스 멤버 클래스를 살펴보았습니다. 중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 1 : 인스턴스 멤버 클래스 중 nozeroslope.tistory.com 로컬 클래스의 특성을 요약하면, 아래의 내용과 같습니다. 일단 기본적으로 특정 메서드의 하위로 선언되기 때..
중첩 클래스&인터페이스(3) - 중첩 클래스의 접근 제한자 2 앞서서 우리는 바깥 클래스에서 중첩 클래스에 접근하는 경우에 대해서 주로 살펴보았습니다. 그렇다면 이번에는 "중첩 멤버 클래스 내부에서" 바깥 클래스의 필드에 접근하는 경우에 발생하는 접근 제한에 대해서도 한번 살펴보도록 하겠습니다. 멤버 클래스로 선언된 중첩 클래스의 경우, 인스턴스 멤버 클래스로 선언되었는지 정적 멤버 클래스로 선언되었는지 여부에 따라서 내부 클래스에서 바깥 클래스로 접근하는 경우에 대한 접근 가능 범위가 달라집니다. 잠깐 생각해 보면, 쉽게 차이를 알 수 있습니다. 바로 정적 멤버 클래스의 경우 접근할 수 있는 바깥 클래스의 멤버가 달라지게 되지요. 원리는 단순합니다. 정적 멤버 클래스는 바깥 클래스의 인스턴스 생성이 없더라도 사용이 가능하기 때문에 - 바깥 클래스의 인스턴스 필드 ..
중첩 클래스&인터페이스(3) - 중첩 클래스의 접근 제한자 1 중첩 클래스의 종류를 다시 한번 상기해 보도록 하겠습니다. 잘 기억이 나지 않는다면, 이전에 설명했던 내용을 다시 한번 살펴보도록 하세요. [멤버 클래스]와 [로컬 클래스]로 대분류가 있고, 멤버 클래스는 [인스턴스 멤버 클래스]와 [정적 멤버 클래스]로 구분된다고 했습니다. 참고로 멤버 클래스는 '메서드 내부에 선언되는' 로컬 클래스와 구분되죠? 중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 1 : 인스턴스 멤버 클래스 중첩 클래스는 '클래스 내부에' 선언되는 클래스입니다. 이때, 이 중첩 클래스는 내부에 선언되는 위치에 따라서 종류가 분류됩니다. 종류는 크게 다음 두 가지가 있습니다. · 멤버 클래스 · 로 nozeroslope.tistory.com 일단 멤버 클래스(인스턴스/정적 멤버 클래스)..
중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 2 : 정적 멤버 / 로컬 클래스 앞서서 우리는 살펴본 중첩 클래스의 분류 중, 멤버 클래스의 한 종류인 인스턴스 멤버 클래스를 살펴보았습니다. 중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 1 : 인스턴스 멤버 클래스 중첩 클래스는 '클래스 내부에' 선언되는 클래스입니다. 이때, 이 중첩 클래스는 내부에 선언되는 위치에 따라서 종류가 분류됩니다. 종류는 크게 다음 두 가지가 있습니다. · 멤버 클래스 · 로 nozeroslope.tistory.com 이번에는 남은 멤버 클래스인 정적(static) 멤버 클래스와 로컬 클래스를 살펴보겠습니다. ○ 정적 멤버 클래스 인스턴스 멤버 클래스에서 제약사항은 static 키워드를 쓰는 필드나 메서드를 사용할 수 없다는 점이었습니다. 그렇다면 이번 정적 멤버 클래스에서는 static을 사용할 ..
중첩 클래스&인터페이스(2) - 중첩 클래스의 종류 1 : 인스턴스 멤버 클래스 중첩 클래스는 '클래스 내부에' 선언되는 클래스입니다. 이때, 이 중첩 클래스는 내부에 선언되는 위치에 따라서 종류가 분류됩니다. 종류는 크게 다음 두 가지가 있습니다. · 멤버 클래스 · 로컬 클래스 분류 선언 위치 특성 멤버 클래스 인스턴스 멤버 클래스 class A { class B { ... } } - 클래스 A 객체가 생성되어야만 사용할 수 있는 중첩 B 클래스 : 그래서 클래스 B에는 static 멤버 / 메서드 선언 불가 정적 멤버 클래스 class A { static class B { ... } } - 클래스 A를 통해 바로 접근할 수 있는 중첩 B 클래스 로컬 클래스 class A { void method( ) { class B { ... } } } - method( )가 실행 중일 때만..
중첩 클래스&인터페이스(1) 기본적으로 OOP에서는 여러 클래스들이 서로 밀접한 관계를 맺고, 다양한 상호작용을 하게 됩니다. 광범위하게 사용되는 클래스도 있고, 한정된 클래스끼리 특수한 관계를 맺기도 합니다. 지금까지 우리는 대부분의 클래스를 독립적으로 작성해 오는 것을 당연하게 여겼는데, 이러한 클래스들은 여러 가지 클래스끼리 관계를 맺기 때문이었습니다. 하지만 어떤 클래스가 특정 클래스만 특수한 관계를 맺는 경우에는, 해당 클래스를 클래스 내부에 다시 선언하는 경우가 있습니다. 이렇게 클래스 내부에 선언한 클래스를 중첩 클래스(Nested Class)라고 합니다. 이렇게 중첩 클래스를 사용하게 되는 경우, 클래스간의 멤버에 쉽게 접근이 가능하면서 동시에 외부와의 불필요한 클래스 관계를 방지하게 되면서 코드 작성에 있어서 효율화..
인터페이스(13) - 디폴트 메서드가 있는 인터페이스의 상속 우리는 인터페이스 사이에도 상속관계가 있음을 배웠죠? 그럼 인터페이스의 상속이 이루어진 상태에서, 디폴트 메서드는 어떻게 동작하게 될지에 대해서도 살펴보도록 하겠습니다. 기본적으로는 추상 메서드와 마찬가지로, 디폴트 메서드 역시 상속이 이루어질 것입니다. 하지만, 이런 단순 상속을 통한 디폴트 메서드의 사용 이외에도 몇 가지 사용 방식이 존재합니다. 이 부분에 대해서 다음과 같이 살펴보도록 하겠습니다. 1. 디폴트 메서드를 그냥 상속해서 사용합니다. 2. 디폴트 메서드를 상속한 다음, 오버라이드 합니다. 3. 디폴트 메서드를 추상 메서드로 재선언 합니다. 우선, 예제에서 사용할 인터페이스 ParentInterface가 다음과 같습니다. public interface ParentInterface { pub..
인터페이스(12) - 디폴트 메서드와 인터페이스의 확장 디폴트 메서드를 배웠던 것을 기억하실 것입니다. 디폴트 메서드는, 기본적으로 인터페이스에서 선언되는 추상 메서드와 달리 메서드의 실행 코드까지 모두 선언되는 메서드였습니다. 선언은 인터페이스에서 되어 있지만, 실제로 실행은 구현 객체를 통해서 이루어지는 독특한 성질을 갖고 있다는 것도 설명했습니다. 인터페이스로서는 상당히 예외적이고 특이한 케이스입니다. 다만 별다른 조작 없이 구현 클래스 인스턴스를 통해서 인터페이스 객체에서 실행 가능하다는 기본 메서드로서의 장점은 있지만 - 정확히 이 디폴트 메서드가 왜 필요한지에 대해서 상세히 살펴보도록 하겠습니다. 인터페이스에 선언된 디폴트 메서드의 가장 기본적인 특징은, 구현 클래스에서 오버라이드를 의무적으로 하지 않아도 된다는 점입니다. 이 특성은, 인터페이스의..