•
오버로딩과 오버라이딩의 차이는 뭔가요?
◦
오버로딩은 같은 이름의 메서드를 매개변수만 다르게 여러 개 정의하는 것
▪
같은 클래스 내에서 컴파일 시점에 동작
◦
오버라이딩은 부모 클래스의 메서드를 재정의 하는 것
▪
상속 관계의 클래스 내에서 런타임 시점에 동작하여 다형성을 구현합니다.
•
다형성이 무엇이고, 왜 필요할까요?
◦
같은 타입의 참조 변수로 서로 다른 구현 객체를 다룰 수 있는 성질을 말합니다. 인터페이스를 활용하여 구현체 클래스를 만들 때 유용하게 사용할 수 있습니다.
•
상속은 무엇인가요?
◦
상위 클래스의 속성과 메서드를 하위 클래스가 물려받는 구조를 말합니다. 공통 기능을 재사용할 수 있다는 장점이 있고, 계층 구조로 서비스를 설계할 수 있습니다.
•
상속과 조합의 차이에 대해 설명해 주세요.
◦
상속은 부모 클래스의 구조를 고정해서 코드 자체를 물려받아서 사용하고, 조합은 다른 객체를 내부로 포함시켜서 기능을 위임시키는 차이가 있습니다. 상속보다 조합이 결합도가 낮아서 실무적으로 더 좋은 설계인 것 같습니다.
•
instanceof 키워드란 무엇인가요?
◦
객체가 특정 클래스나 인터페이스의 인스턴스인지 확인하는 연산자입니다.
◦
다형성으로 업캐스팅된 객체의 실제 타입을 판단하는 역할을 합니다.
◦
그래서 타입에 따라서 분기 처리할 때 사용합니다.
•
instanceof 키워드를 사용할 때 문제점으로 무엇이 있을까요?
◦
OOP 원칙 위반 가능성이 있음
→ 분기마다 타입 체크해서 다운캐스팅하면 유지보수 어려워짐
◦
다형성의 장점을 죽임
→ 타입을 직접 확인해서 분기하는 건 다형성을 피하는 코드
때문에 오버라이딩이나 전략 패턴을 쓰는게 더 좋습니다.
•
interface란 무엇일까요?
◦
메서드 이름이나 매개변수 개수, 타입 등 추상적인 시그니처만 정의하고, 구현은 하위 클래스에 맡기는 형태입니다.
•
interface와 abstract class는 어떤 차이가 있나요?
◦
인터페이스는 상속을 통해 다중 구현이 가능하고, abstract class는 단일 상속만 가능합니다.
◦
인터페이스는 모든 메서드가 추상 메서드이지만, abstract class는 일부 메서드를 구현이 가능합니다.
◦
인터페이스는 필드 자체가 모두 static만 가능하지만, abstract class는 일반 변수도 선언이 가능합니다.
•
언제 interface 사용하고, 언제 abstract class 사용 하나요?
◦
여러 타입에 같은 기능만 정의하고 싶다면 인터페이스, 공통 타입, 공통 로직이 필요하다면 abstract class를 사용합니다.
◦
그리고 다중 상속이 필요하면 인터페이스, 상속 계층을 고정해서 단일 상속만 받고싶다면 abstract class 를 사용합니다.
•
final 키워드에 대해 설명해 주세요
◦
final은 변경 금지를 의미합니다.
◦
변수의 경우 final 키워드는 상수를 의미하고
◦
메서드는 오버라이딩이 불가능한 메서드로 선언함을 의미하고
◦
클래스는 상속이 불가능한 클래스임을 의미합니다.