오버로딩과 오버라이딩의 차이는 뭔가요?
오버로딩은 메서드 이름, 반환 타입은 동일하지만, 매개변수만 다른 메서드를 구현하는 것입니다.
오버라이딩은 부모클래스 메서드를 자식 클래스가 재정의 하는 것입니다.
이 경우, 메서드 시그니처는 동일합니다. 즉, 메서드 이름, 매개변수, 반환 타입이 같습니다.
static, final, private 키워드가 붙은 메서드는 오버라이딩이 불가합니다.
static 키워드는 클래스 메서드니까 인스턴스 레벨에서 오버라이딩이 안 됩니다.
final 키워드는 재정의 안된다는 의미이므로 오버라이드 금지입니다.
private 메서드는 해당 클래스에서만 접근 가능하기 때문에 오버라이딩이 안 됩니다.
다형성이 무엇이고, 왜 필요할까요?
다형성은 서로 다른 객체를 특정 개념에 속하는 것으로 다루는 성질이다.
예를 들어, 자식 클래스 객체를 부모 클래스 타입에 담아 참조할 수 있다. (부모 클래스는 자식 클래스타입을 담을 수 있다)
클래스 상속 관계를 통해 코드 중복을 줄이는 효과가 있다.
상속은 무엇인가요?
특정 클래스의 기능을 확장하는 기능이다.
상속으로 코드 중복을 줄일 수 있다
자식 클래스 인스턴스를 생성하면, 메모리 내부에 자식과 부모클래스 각각 만들어진다.
→ 따라서 각각의 생성자도 모두 호출되어야 한다!
- extends 상속한 자식 클래스의 생성자는 부모 클래스의 생성자를 반드시 호출해야 한다!
- 부모 클래스 생성자를 호출할 때는 super() 를 사용하면 된다.
- 단, 부모 클래스의 생성자가 기본생성자인 경우, super() 를 생략 가능하다.
- 언젠가는 반드시 부모를 호출 해야 한다.
상속의 단점은 무엇이 있을까요?
부모 클래스를 변경하고 싶을 때, 자식 클래스에 영향을 미칠 수 있다. -> 부모 클래스와 자식 클래스의 강한 결합
상속을 여러번 받게 된다면 복잡한 구조를 갖게 된다.
상속은 부모 클래스의 구현을 숨길 수 없다.-> 캡슐화와 은닉을 깨뜨릴 수 있다.
자바는 단일 상속만 허용하므로 신중하게 설계해야 한다.
상속과 조합의 차이에 대해 설명해 주세요.
상속은 부모 클래스를 확장하여 자식 클래스를 작성하는 것이다.
조합(또는 합성 composition) 은 새로운 클래스를 작성하고 조합할 클래스를 private 필드로 참조하는 방식이다.
상속은 클래스 간의 정적인 관계지만 조합은 객체 사이의 동적인 관계다. 런타임에 동적으로 변경할 수 있다.
instanceof 키워드란 무엇인가요?
참조변수 instanceof 타입 -> 해당 타입으로 캐스팅 가능한지 boolean 타입으로 리턴하는 연산자다
instanceof 키워드 사용 시 문제점이 무엇이 있을까요?
다형성을 제대로 활용하지 못한다.
다형성은 구체 타입에 의존하지 않기 위함인데, instanceof 를 남용하면 다형성을 활용하지 못하게 된다.
interface 란 무엇일까요?
- 추상메서드로 구성된 인터페이스 클래스다.
- 여러 클래스가 공통으로 가져야 하는 특정 규약을 약속할 때 사용한다.
- 하나의 클래스는 여러개의 interface 를 구현할 수 있다.
interface 와 abstract class 는 어떤 차이가 있나요?
인터페이스
- 추상 메서드로 구성되어 있다. 메서드 시그니처만 존재하고 body가 없다.
- interface 를 implements 하여 어떤 메서드들을 포함한 클래스들을 다형성으로 다룰 수 있다.
추상클래스
- 추상 메소드를 1개 이상 포함하고 있는 클래스다. 덜 구현된 클래스.
- 필드와 (메서드 body 를 포함한) 일반 메서드를 포함할 수 있다.
- 추상클래스를 extends 하여 재정의한 클래스를 정의하는 용도다.
- 자바는 단일 상속만 허용하므로 하나의 추상클래스만 상속할 수 있다.
[참고] 둘의 공통점 : 인스턴스를 생성할 수 없다.
언제 interface 를 사용하고, 언제 abstract class 를 사용하나요?
인터페이스 사용 예
- 특정 기능 구현을 강제하고 싶은 경우에 사용한다.
- 상수만 필요할 때 사용한다. 상수 선언 시, public static final 이 자동으로 생략되어 붙는다.
추상클래스 사용 예
- 특정 메서드의 구현이 공통적으로 필요할 때 사용한다. (코드 중복 방지)
- 자식클래스에 일부 메서드 구현을 강제하고 싶을 때 사용한다.
final 키워드에 대해 설명해주세요.
final 키워드 의미
- 값을 재할당 못한다는 의미다.
자바 상수
- 변하지 않는 값을 사용하기 위해 상수를 쓴다
- static final 키워드를 사용한다.
- 필드명을 대문자와 언더스코어로 구성한다.
final 을 필드에 사용하는 경우
- 생성자를 통해 한 번만 초기화할 수 있다.
final 을 지역변수에 사용하는 경우
- 값을 최초 한 번만 할당할 수 있다.
- 재할당 할 수 없다.