객체지향 프로그래밍(Object-Oriented Programming, OOP)은 추상화, 캡슐화, 상속, 다형성이라는 네가지 핵심 개념을 바탕으로 설계된다.
1. 추상화 (Abstraction)
- 복잡한 시스템에서 핵심적인 정보만 추출하고, 불필요한 부분은 숨기는 개념
- 객체의 주요 기능을 정의하는 인터페이스나 추상 클래스를 사용
- 현실 세계의 개념을 프로그래밍에서 표현하기 쉽게 만들어줌
2. 캡슐화 (Encapsulation)
- 데이터를 숨기고, 외부에서 직접 접근하지 못하도록 제한하는 기법
- private 키워드로 멤버 변수를 보호하고, getter/setter를 사용해 접근한다.
- 데이터 무결성을 유지하고, 보안성을 높임
예시
class Person {
private String name; // private 멤버 변수
public void setName(String name) { // Setter
this.name = name;
}
public String getName() { // Getter
return name;
}
}
Person 클래스의 name 변수는 직접 접근할 수 없고, getName() 및 setName() 메서드를 통해서만 수정 가능
3. 상속 (Inheritance)
- 기존 클래스(부모)로부터 속성과 메서드를 물려받아 새로운 클래스를 생성하는 개념
- 코드의 재사용성을 높이고 유지보수를 쉽게 만듬
- extends 키워드를 사용하여 구현
예시
class Animal {
void eat() {
System.out.println("먹고 있어요!");
}
}
class Dog extends Animal {
void bark() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 부모 클래스의 메서드 사용
dog.bark(); // 자신의 메서드 사용
}
}
Dog 클래스는 Animal 클래스를 상속받아 eat() 메서드를 사용할 수 있음
4. 다형성 (Polymorphism)
- 같은 메서드 호출 방식으로 다른 동작을 수행하는 개념
- 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현
- 인터페이스와 상속을 활용하면 코드 확장성이 높아짐
예시
class Animal {
void eat() {
System.out.println("먹고 있어요!");
}
}
class Dog extends Animal {
void bark() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 부모 타입으로 자식 객체 참조
myAnimal.eat(); // 출력: 먹고 있어요!
}
}
Animal 타입이지만, 실제로는 dog 객체가 실행되며 먹고 있어요!가 출력된다.
5. 왜 사용할까?
1) 코드의 재사용성 증가
- 상속을 통해 기존 클래스를 재사용하여 새로운 클래스를 만들 수 있다.
- 공통 기능을 분리하여 중복 코드를 줄일 수 있다.
2) 유지보수 및 확장 용이
- 캡슐화로 데이터를 보호하고, 외부 코드 변경 없이 내부 로직을 수정 가능
- 다형성을 활용하면 코드 수정 없이 새로운 기능을 추가할 수 있다.
3) 높은 코드 가독성과 모듈화
- 추상화로 복잡한 시스템을 단순하게 표현 가능
- 각각의 객체가 독립적으로 동작하여 모듈화가 가능
4) 확장성과 유연성 증가
- 인터페이스와 다형성을 활용하면 새로운 기능을 추가할 때 기존 코드 수정 없이 확장 가능
- 객체 간 결합도가 낮아 유지보수 및 테스트가 쉬워진다.
'Java' 카테고리의 다른 글
Java Interface의 개념과 활용 (0) | 2025.02.15 |
---|---|
[JAVA] Servlet Filter란? (0) | 2025.01.15 |
[JAVA] Kakao Pay Api 사용법 (0) | 2025.01.13 |
[JAVA] Thread (1) | 2025.01.08 |
[JAVA] Java란 무엇인가 (3) | 2025.01.02 |