주의

  • 본 게시글은 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)