주의
- 본 게시글은 ChatGPT로 작성되었습니다. 잘못된 정보가 있을 수 있습니다.
개요
Java는 객체지향 프로그래밍 언어로, 이를 통해 복잡한 프로그램을 쉽게 관리하고 확장할 수 있도록 도와줍니다. Java의 기본 개념에는 클래스, 객체, 상속, 다형성, 그리고 캡슐화가 포함됩니다. 이 문서에서는 이러한 개념을 설명하고, 면접에서 자주 나오는 질문과 모범 답안을 제시합니다.
상세
1. 객체지향 프로그래밍(OOP)
- 정의: 객체지향 프로그래밍은 데이터를 객체 형태로 묶어 관리하는 프로그래밍 패러다임입니다.
- 장점:
- 코드 재사용성 증가
- 유지보수 용이
- 현실 세계 모델링 가능
2. 클래스와 객체
-
클래스: 객체의 구조와 행동을 정의하는 청사진. 예를 들어,
Car클래스를 정의할 수 있습니다. -
객체: 클래스의 인스턴스로, 실제로 메모리에 생성된 데이터입니다.
class Car { String color; String model; void displayDetails() { System.out.println("모델: " + model + ", 색상: " + color); } } // 객체 생성 Car myCar = new Car(); myCar.color = "검정색"; myCar.model = "소나타"; myCar.displayDetails();
3. 상속
-
정의: 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 메커니즘입니다.
-
장점: 코드의 재사용성과 계층적 분류 가능.
class Vehicle { void start() { System.out.println("차량이 시작되었습니다."); } } class Car extends Vehicle { void honk() { System.out.println("빵빵!"); } } Car myCar = new Car(); myCar.start(); // 부모 클래스인 Vehicle의 메서드 호출 myCar.honk();
4. 다형성
- 정의: 동일한 인터페이스에 대해 서로 다른 구현을 가질 수 있는 능력입니다.
- 예시: 메서드 오버로딩과 오버라이딩
5. 캡슐화
-
정의: 데이터와 메서드를 하나의 단위로 묶고, 외부에서 접근을 제한하는 기법입니다.
class Account { private double balance; public void deposit(double amount) { balance += amount; } public double getBalance() { return balance; } }
예상 면접 질문/답안
질문 1: 객체지향 프로그래밍의 주요 특징은 무엇인가요?
답안: 객체지향 프로그래밍의 4대 특징은 캡슐화, 상속, 다형성, 추상화입니다. 캡슐화는 데이터 보호를 위해 데이터를 숨기는 것이고, 상속은 기존 클래스를 기반으로 새로운 클래스를 만드는 것입니다. 다형성은 같은 메서드 이름이지만 다양한 방식으로 동작할 수 있게 하는 것이고, 추상화는 복잡한 세부사항을 숨기고 기본적인 것만 보여주는 것입니다.
질문 2: 클래스와 객체의 차이를 설명해 주세요.
답안: 클래스는 객체 생성의 청사진으로, 객체의 구조와 행동을 정의합니다. 객체는 클래스로부터 생성되며, 메모리에서 존재하는 인스턴스입니다. 예를 들어 Car 클래스는 여러 차 객체를 생성할 수 있는 템플릿입니다.
질문 3: 상속이란 무엇이며 장점은 무엇인가요?
답안: 상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 기능입니다. 장점으로는 코드 재사용성을 높이고, 공통된 기능을 상위 클래스에 정의하여 코드 유지보수를 쉽게 할 수 있다는 점이 있습니다.
질문 4: 다형성의 예제를 들어 설명해 주세요.
답안: 다형성은 메서드 오버로딩과 오버라이딩을 통해 구현됩니다. 같은 이름의 메서드가 클래스마다 다르게 동작하는 것을 예로 들 수 있습니다. 예를 들어, Animal 클래스가 speak() 메서드를 가지고, 자식 클래스인 Dog는 “멍멍”, Cat은 “야옹”을 출력할 수 있습니다.
질문 5: 캡슐화의 중요성은 무엇인가요?
답안: 캡슐화는 객체의 내부 상태를 보호하는 데 중요합니다. 외부에서 객체의 상태를 변경하지 못하도록 하여 데이터의 무결성을 유지할 수 있습니다. 예를 들어, 은행 계좌 클래스에서 잔고를 private로 설정하면 외부에서 직접 접근할 수 없습니니다.
스스로 찾아보면 좋은 연관 주제
- 인터페이스와 추상 클래스
- 예외 처리(Exception Handling)
- 컬렉션 프레임워크
- 쓰레드와 동시성(Concurrency)
- 디자인 패턴(Design Patterns)