# 질의 응답 상황
[면접관]
지원자님 Java를 주로 사용하셨는데 객체지향 프로그래밍에 대해서 간략하게 설명해주세요. |
[막개발자]
객객체지향 프로그래밍(OOP)은 애플리케이션을 구성하는 요소들을 객체로 바라보고, 그 객체들을 유기적으로 연결하여 프로그래밍하는 방식입니다. Java나 C#이 대표적인 객체지향 프로그래밍 언어입니다. 가장 큰 특징은 클래스를 이용해 메서드와 변수를 하나로 묶어서 객체를 생성하고 사용하는 점입니다.장점
단점
객체지향 프로그래밍의 특징
|
# 상세 설명
객체지향 프로그래밍(Object-Oriented Programming, OOP)
OOP는 프로그램을 **객체(Object)**라는 단위로 나누어 설계하고 구현하는 프로그래밍 패러다임입니다. 객체는 **데이터(속성)**와 **동작(메서드)**을 포함하고 있으며, 현실 세계를 모델링하는 데 적합합니다. OOP는 재사용성, 유지보수성, 확장성을 높이고, 코드를 체계적으로 관리할 수 있도록 도와줍니다.
1. 객체지향 프로그래밍의 핵심 개념
- 클래스(Class)
클래스는 객체를 생성하기 위한 설계도입니다. 속성(필드)과 동작(메서드)을 정의하며, 객체의 틀을 제공합니다.
class Car {
String brand;
int speed;
void drive() {
System.out.println(brand + " is driving at " + speed + " km/h");
}
}
- 객체(Object)
객체는 클래스의 인스턴스이며, 메모리에 할당된 데이터입니다.
Car myCar = new Car();
myCar.brand = "Tesla";
myCar.speed = 100;
myCar.drive(); // Tesla is driving at 100 km/h
- 캡슐화(Encapsulation)
데이터(필드)와 메서드를 하나의 단위(클래스)로 묶고, 외부에서 접근할 수 없도록 보호합니다.
class Account {
private double balance;
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
- 상속(Inheritance)
기존 클래스(부모 클래스)의 속성과 메서드를 물려받아 새로운 클래스를 정의합니다.
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
Dog dog = new Dog();
dog.eat(); // 부모 클래스의 메서드 호출
dog.bark();
- 다형성(Polymorphism)
같은 이름의 메서드가 다양한 동작을 수행하도록 하는 능력입니다. 오버로딩과 오버라이딩을 통해 구현됩니다. - 오버라이딩(Overriding):
class Animal {
void sound() {
System.out.println("Some sound...");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("Meow");
}
}
- 오버로딩(Overloading):
class MathUtils {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
2. 객체지향 프로그래밍의 장점
- 코드 재사용성
상속을 통해 중복 코드를 줄이고, 코드의 재사용성을 높일 수 있습니다. - 유지보수성
코드의 구조가 잘 분리되어 있어 수정이 용이합니다. - 확장성
기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있습니다. - 현실 세계 모델링
현실 세계의 객체와 유사하게 모델링할 수 있어 이해하기 쉽고 직관적입니다. - 보안성
캡슐화로 인해 데이터를 보호하고, 외부에서 데이터에 대한 무분별한 접근을 차단할 수 있습니다.
3. 객체지향 설계 원칙 (SOLID 원칙)
- 단일 책임 원칙(SRP)
각 클래스는 하나의 책임만 가져야 합니다. - 개방-폐쇄 원칙(OCP)
클래스는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 합니다. - 리스코프 치환 원칙(LSP)
서브클래스는 부모 클래스의 기능을 대체할 수 있어야 합니다. - 인터페이스 분리 원칙(ISP)
클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다. - 의존 역전 원칙(DIP)
상위 모듈은 하위 모듈에 의존하지 않고, 둘 다 추상화에 의존해야 합니다.
4. 객체지향 프로그래밍의 한계
- 복잡성 증가
설계가 지나치게 복잡해질 수 있습니다. - 성능 문제
다형성과 캡슐화로 인해 성능 저하가 발생할 수 있습니다. - 과잉 설계
단순한 문제에 객체지향 방식을 적용할 때 불필요한 코드가 증가할 수 있습니다.
5. 객체지향 프로그래밍 예제
class Shape {
void draw() {
System.out.println("Drawing a shape");
}
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw(); // Drawing a circle
shape2.draw(); // Drawing a rectangle
}
}
6. 객체지향 프로그래밍 언어
대표적인 객체지향 언어: Java, C++, Python, C#, Ruby
객체지향 프로그래밍은 현대 소프트웨어 개발에서 가장 널리 사용되는 프로그래밍 패러다임입니다.
'[이직 면접] 질의 응답' 카테고리의 다른 글
[네트워크] OSI 7계층에 대해서 설명하세요. (0) | 2020.12.29 |
---|---|
[Java] System.out.println()에 대해해 설명하세요 (0) | 2020.12.29 |
[Web 개발 기본] Proxy Pattern에 대해서 설명 하세요. (0) | 2020.12.06 |
[Java] 객체와 class에 대해서 설명하세요. (0) | 2020.12.06 |
[자료구조] 페이지교체 알고리즘에 대해서 설명하세요. (0) | 2020.12.06 |