ingyuseong/Jav-A-Bom

[Part 1][3주차] static, 싱글턴, 내포 클래스 / 상속

Closed this issue · 5 comments

Contents

static, 싱글턴, 내포 클래스 / 상속

탐구 키워드

static, 싱글턴, 내포 클래스

  • static
  • 디자인 패턴과 싱글턴
  • 내포 클래스

상속

  • 상속

공통주제

  • 람다식

질문은 Comment를 통해서

  1. Static nested class는 어떤 경우에 유용하게 활용되는지 궁금합니다.

  2. 익명 클래스(anonymous class)가 클래스를 상속하는 경우 혹은 두 개 이상의 인스턴스를 구현하는 경우가 가능한지, 가능하다면 문법이 어떻게 되는지(코드를 어떻게 작성해야하는지) 궁금합니다.

둘 다 예제도 있으면 좋을 것 같네요 👍

  1. 강의에서 전반적으로 상속의 목적은 재사용성이다(102. is-a, has-a 부분에 명시되어있음). 라고 설명하고 있습니다. 하지만, 상속은 코드의 재활용을 목적으로 만들어진 문법이 아니다. 상속을 통해 연관된 일련의 클래스들에 대해 공통적인 규약(protocol)을 정의할 수 있다는 점이 핵심이다. 라는 주장도 있습니다. 이외에도 다양한 주장이 많은데, 상속의 목적에 대한 개인의 의견이 궁금하네요.

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 처럼 표현이 편리해지고 문법적으로 깔끔해진다.
비정적 내포 클래스의 경우

OuterClass outerObject = new OuterClass()
OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

처럼 따로 인스턴스를 만들어야 하므로 깔끔한 느낌이 들지 않는다. 수업에서도 이 내용에 대해서 다루긴 해서 적기 애매했지만 찾아봐도 어떤 경우에 유용하게 쓰이는 지는 못찾아서 그냥 적엇다..

  1. 확실하진 않지만... static nested class는 외부 클래스와 독립적이어서 static nested class를 사용하여 private 생성자만 있는 외부 클래스를 인스턴스화 할 수 있습니다.내부 클래스에서는 수행할 수 없습니다. 예를들어서
    public class A {
    private A(){ ... }
    static class B {
    ....
    }
    }
    내부 클래스인 경우는 A를 생성하고 B를 생성해야해서 A를 생성하는 것이 불가능 하기 때문에 B를 생성을 못합니다. 따라서 이런 경우에서는 static nested class가 잘 활용 될 것 같습니다.
    그리고 내부 클래스 자체가 외부 클래스에대한 참조가 있는데 이것은 메모리 참조가 유지된다는 뜻이니까 메모리 누수와 관련이 있어서 대체로 static nested class를 써야한다라고 들었습니다.

@staycozyboy 3번에 대한 답을 섹션 13 193강에서 찾았네요.
상속의 동작에서 재사용성만을 논하는 건 반쪽짜리라고 강의에서 명확하게 밝히고 있습니다.
자식이 따라야하는 공통의 인터페이스(프로토콜)을 정의하는 것도 중요하다고 하네요!