🧩 BE
home

Java (객체 지향)

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