Q1. 코딩에서 로직이란?
A1. 로직은 프로그램의 논리적인 흐름을 의미한다.
Q2. 아래 코드에서 ...이 뭐지?
void carSpeeds(double ... speeds) {
for (double v : speeds) {
System.out.println("v = " + v);
}
}
A2. ...
는 가변 길이의 매개 변수를 의미한다. 매개변수의 개수를 동적으로 지정 가능하다. 내부적으로 배열 형태로 사용된다. 가변인자는 오버로딩 시 주의가 필요하다.
Q3. 서로 다른 패키지 2개를 Import 했을 때 클래스 명이 같으면?
A3. 하나만 import하고 다른 하나는 전체 경로를 사용해야 한다.
Q4. 상속받은 자식 클래스에서 객체를 생성할 때 왜 부모 클래스로 선언하고 자식클래스로 객체를 생성하는 건가?
A4. 부모 클래스로 선언하고 자식 클래스로 객체를 생성하면 다형성, 코드 유연성, 확장성, 일관된 메서드 사용, 내부 구현 은닉 등의 이점이 있다.
Q5. 인터페이스는 다중상속이 가능하지만, 추상 클래스나 일반 클래스는 왜 다중 상속을 못하게 했는가?
A5. 인터페이스는 메서드의 구현을 포함하지 않아 다중 상속의 위험이 없다. 하지만, 추상 클래스와 클래스는 메서드의 구현을 포함할 수 있어 다중 상속 시 충돌 위험이 있다.
Q6. 디폴트 메서드가 인터페이스에 포함되면 구현이 포함된 메서드를 가지는데 다중 상속에 문제되지 않는가?
A6. Java는 디폴트 메서드와 다른 메서드 간의 충돌 시, 몇 가지 규칙을 통해 문제를 해결한다. 동일한 디폴트 메서드의 충돌이나 디폴트 메서드와 추상 메서드의 충돌 등의 경우에는 클래스에서 명확한 구현을 제공해야 한다.