소프트웨어 개발 패러다임 중 하나로, 프로그램을 객체의 집합으로 구성하여 개발하는 방법입니다. 객체는 데이터와 그 데이터를 처리하는 메소드를 포함하며, 이들 객체 간의 상호작용을 통해 프로그램이 동작합니다. 객체 지향 프로그래밍의 주요 개념을 아래와 같이 설명할 수 있습니다.
정의: 객체는 데이터(속성)와 이를 처리하는 코드(메소드)를 포함하는 독립적인 단위입니다.
예: 자동차 객체는 속성으로 색상, 제조사, 속도 등을 가질 수 있으며, 메소드로는 가속, 감속 등이 있을 수 있습니다.
정의: 클래스는 객체를 생성하기 위한 설계도 또는 청사진입니다. 클래스는 객체의 속성과 메소드를 정의합니다.
예: 자동차 클래스를 정의하면 이 클래스를 기반으로 여러 자동차 객체를 만들 수 있습니다.
정의: 캡슐화는 객체의 속성과 메소드를 하나로 묶고, 객체의 내부 구현을 외부에 숨기는 것입니다. 이를 통해 데이터의 무결성을 보호하고, 객체의 인터페이스를 통해서만 접근할 수 있도록 합니다.
예: 자동차의 내부 엔진 구조를 감추고, 가속 페달과 브레이크 페달이라는 인터페이스만 제공하여 제어합니다.
정의: 상속은 한 클래스가 다른 클래스의 속성과 메소드를 상속받아 사용하는 것입니다. 이를 통해 코드의 재사용성을 높이고, 계층적인 관계를 형성할 수 있습니다.
예: '승용차' 클래스는 '자동차' 클래스를 상속받아, 자동차의 기본 속성과 메소드를 그대로 사용하면서, 승용차만의 특성을 추가할 수 있습니다.
정의: 다형성은 같은 메소드가 다양한 방식으로 동작할 수 있도록 하는 것입니다. 주로 메소드 오버로딩(같은 이름의 메소드를 여러 개 정의)과 메소드 오버라이딩(상속받은 메소드를 재정의)으로 구현됩니다.
예: '자동차' 클래스의 '운전' 메소드를 '승용차'와 '트럭' 클래스에서 각각 다르게 구현할 수 있습니다.
정의: 추상화는 복잡한 시스템에서 주요 기능을 간추려 내고, 불필요한 부분을 숨기는 것입니다. 추상 클래스와 인터페이스를 통해 구현됩니다.
예: '운송수단'이라는 추상 클래스는 '운전'이라는 추상 메소드를 정의하고, 구체적인 '자동차'와 '자전거' 클래스는 이를 구현합니다.
// 추상 클래스 (Abstraction)
abstract class Vehicle {
private String color;
private int speed;
// 캡슐화 (Encapsulation)
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
// 추상 메소드 (Abstraction)
public abstract void drive();
}
// 상속 (Inheritance)
class Car extends Vehicle {
private int numberOfDoors;
public int getNumberOfDoors() {
return numberOfDoors;
}
public void setNumberOfDoors(int numberOfDoors) {
this.numberOfDoors = numberOfDoors;
}
// 다형성 - 메소드 오버라이딩 (Polymorphism)
@Override
public void drive() {
System.out.println("Driving a car");
}
}
class Truck extends Vehicle {
private int loadCapacity;
public int getLoadCapacity() {
return loadCapacity;
}
public void setLoadCapacity(int loadCapacity) {
this.loadCapacity = loadCapacity;
}
// 다형성 - 메소드 오버라이딩 (Polymorphism)
@Override
public void drive() {
System.out.println("Driving a truck");
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setColor("Red");
car.setSpeed(100);
car.setNumberOfDoors(4);
car.drive(); // "Driving a car"
Truck truck = new Truck();
truck.setColor("Blue");
truck.setSpeed(80);
truck.setLoadCapacity(1000);
truck.drive(); // "Driving a truck"
}
}
모의 면접에서 물어봤던 객체지향이란 무엇인가에 대해서 답변을 하지 못하였다. 공부를 하면서 하나하나 깊게 공부를 해야 할 것 같다.