1. 클래스와 인스턴스의 차이를 설명해 주세요.
네, 클래스는 객체를 만들기 위한 설계도 역할을 합니다. 객체가 가질 속성이나 기능들을 미리 정의해 놓은 구조라고 볼 수 있어요.
반면에 인스턴스는 이 클래스라는 설계도를 통해 실제로 만들어진 객체를 뜻합니다. 같은 클래스에서 여러 개의 인스턴스를 만들 수 있고, 각 인스턴스는 클래스의 구조를 따르지만 서로 독립적으로 존재합니다
2. 클래스 변수와 인스턴스 변수의 차이점을 설명해 주세요.
클래스 변수는 클래스에 한 번만 선언되며, 모든 인스턴스가 공유하는 변수입니다. static 키워드를 사용해 선언되며, 클래스 이름으로 직접 접근할 수 있죠. 반면, 인스턴스 변수는 각각의 인스턴스에 고유하게 할당되는 변수입니다. 즉, 인스턴스마다 개별적으로 값을 가지고 있으며, 인스턴스가 생성될 때 메모리에 할당됩니다.
3. 클래스 메서드와 인스턴스 메서드의 차이점은 무엇인가요?
클래스 메서드는 클래스 자체에 속한 메서드로, static 키워드를 사용해 선언합니다. 그래서 특정 인스턴스가 없어도 클래스 이름으로 호출할 수 있죠. 반면, 인스턴스 메서드는 특정 인스턴스에 속한 메서드로, 해당 인스턴스를 통해서만 호출할 수 있습니다. 예를 들어, Car 클래스의 getTotalCars()라는 클래스 메서드는 Car.getTotalCars()로 호출할 수 있지만, myCar.drive() 같은 인스턴스 메서드는 myCar라는 인스턴스를 통해서만 호출 가능합니다.
4. 객체 생성 시 클래스의 생성자는 어떤 역할을 하나요?
생성자는 클래스의 인스턴스를 초기화하는 역할을 합니다. 객체를 생성할 때 자동으로 호출되며, 객체의 초기 상태를 설정합니다. 생성자를 통해 필드의 값을 초기화하거나 필요한 초기 작업을 수행할 수 있습니다. 생성자는 클래스 이름과 동일한 이름을 가지며, 반환 타입이 없습니다.
5. 클래스를 여러 개의 인스턴스로 만들 수 있는 이유는 무엇인가요?
클래스는 메모리에 고정된 데이터 구조로 존재하지 않고, 새로운 인스턴스를 만들 때마다 메모리에 별도의 공간을 할당받아 독립적인 상태를 가질 수 있기 때문입니다. 이렇게 각각의 인스턴스는 클래스의 설계 구조에 따라 개별적인 데이터를 가지며, 클래스는 인스턴스들이 참조하는 공통 설계로서 기능합니다.
6. 클래스 상속과 인스턴스 상속의 차이점은 무엇인가요?
엄밀히 말하면, 클래스는 상속할 수 있지만, 인스턴스는 상속할 수 없습니다. 클래스 상속은 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 재사용하거나 확장할 수 있도록 하는 개념입니다. 반면, 인스턴스는 상속이 아니라 클래스의 구조에 따라 생성된 객체이기 때문에 상속 개념이 적용되지 않습니다. 인스턴스는 부모 클래스로부터 상속받은 기능을 사용할 수 있을 뿐, 자체적으로 상속 관계를 가질 수는 없습니다.
7. 인스턴스가 생성될 때 메모리에는 어떤 구조로 할당되나요?
인스턴스가 생성될 때 메모리에는 크게 힙 영역과 스택 영역에 데이터가 할당됩니다. 힙 영역에는 인스턴스 자체가 저장되고, 각 인스턴스마다 독립된 공간이 할당됩니다. 스택 영역에는 인스턴스의 참조 변수(주소)가 저장되죠. 인스턴스가 힙 영역에 존재하더라도 스택에서 더 이상 참조하지 않으면 가비지 컬렉터에 의해 제거됩니다.
8. 클래스와 인스턴스가 중요한 이유는 무엇인가요?
클래스와 인스턴스는 객체 지향 프로그래밍의 핵심 개념입니다. 클래스는 설계도를 제공하여 코드의 재사용성과 유지보수성을 높이고, 인스턴스를 통해 그 설계도에 따라 개별 객체를 생성하여 다양한 상태와 행동을 가질 수 있도록 합니다. 이렇게 클래스와 인스턴스를 분리하여 프로그램을 구조화하면, 코드의 효율성과 확장성을 높일 수 있습니다.
9. 클래스 내부에서 다른 클래스의 인스턴스를 생성하는 경우가 있는데, 왜 이런 방식이 필요한가요?
클래스 내부에서 다른 클래스의 인스턴스를 생성하는 것은 의존성 주입이나 구성(composition) 같은 객체 지향 설계 원칙을 따르기 위한 것입니다. 하나의 클래스가 다른 클래스의 인스턴스를 사용해 기능을 수행함으로써 객체 간 협력이 가능하고, 코드의 재사용성과 유연성을 높일 수 있습니다. 이를 통해 각 클래스가 독립적인 역할을 하면서도, 서로의 기능을 활용해 복합적인 기능을 구현할 수 있습니다.
10. 인스턴스 생성 없이 클래스 이름으로 메서드를 호출할 수 있는 경우가 있나요? 왜 그런가요?
네, 가능합니다. 바로 static 메서드를 사용하면 됩니다. static 메서드는 클래스 자체에 속해 있기 때문에 인스턴스를 생성하지 않고 클래스 이름으로 바로 호출할 수 있어요. 예를 들어 Math.random()처럼 Math 클래스의 인스턴스를 생성하지 않고도 static 메서드를 직접 호출할 수 있죠. static 메서드는 주로 인스턴스에 의존하지 않는, 공통적인 기능을 구현할 때 사용됩니다.
'면접 예상 질문 모음!' 카테고리의 다른 글
동기, 비동식 처리 방식-면접 예상 질문 (0) | 2024.11.11 |
---|---|
SPRING IOC-면접 예상 관련 질문 (0) | 2024.11.11 |
스프링 빈- 면접 예상 질문 (0) | 2024.11.11 |
스프링 빈 주입시 생기는 문제들 -면접 예상 질문 (0) | 2024.11.10 |
ORM, JPA, HIBERNATE, MYBATIS란? (1) | 2024.11.08 |