객체지향(Object-Oriented Programming, OOP)
프로그램을 객체(Obejcts)라는 독립적 단위들로 나누고,
이 객체들이 서로 상호작용하며 전채 시스템을 구성하도록 설계하는 프로그래밍 패러다임이다.
객체지향의 핵심 개념
- 객체 (Object)
▶ 객체는 데이터(속성)와 기능(메서드)를 가진 프로그램의 독립적 단위이다.
▶ 예를 들어, 자동차 라는 객체에는 색상, 모델명 같은 속성이 있고, 운전하다(), 정지하다() 와 같은 기능이 있을 수 있다. - 클래스 (Class)
▶ 클래스는 객체를 생성하기 위한 설계도이다. 객체의 속성과 기능을 정의한다.
▶ 예를 들어, 자동차 라는 클래스를 만들어두면, 이 클래스를 통해 다양한 자동차 객체(예: 빨간 자동차, 파란 자동차)를 생성할 수 있다. - 상속 (Inheritance)
▶ 상속은 기존 클래스의 속성과 기능을 다른 클래스가 물려받아 사용하는 개념이다.
▶ 예를 들어, 자동차 클래스를 상속받아 스포츠카 클래스를 만들면 자동차의 기본 기능을 모두 물려받고, 터보모드() 같은 추가 기능을 정의할 수 있다. - 다형성 (Polymorphism)
▶ 다형성은 하나의 메서드가 여러 클래스에서 다양하게 구현될 수 있는 성질을 의미한다.
▶ 예를 들어, 운전하다() 라는 메서드는 자동차와 오토바이 객체에서 각각 다르게 동작할 수 있다. - 캡슐화 (Encapsulation)
▶ 캡슐화는 객체의 속성과 기능을 하나로 묶고, 외부에서 접근을 제한하는 것을 의미한다.
▶ 예를 들어, 자동차 객체의 속성 연료량을 외부에서 바로 수정할 수 없고, 연류를추가하다() 메서드를 통해서만 연료를 추가할 수 있게 만드는 방식이다. - 추상화 (Abstraction)
▶ 추상화는 필요한 속성과 기능만을 모델링하여 복잡한 시스템을 단순화하는 것을 의미한다.
▶ 예를 들어, 동물 이라는 추상적 개념에는 이름, 나이, 소리내기() 같은 속성과 같은 기능이 있을 수 있다. 그리고 이를 기반으로 고양이, 강아지 등의 구체적인 객체를 설계할 수 있다.
객체지향 프로그래밍의 장점
- 코드의 재사용성: 상속과 다형성을 통해 기존 코드를 재사용할 수 있어, 유지보수가 쉬워진다.
- 유지보수성: 객체별로 독립적인 모듈로 관리가 가능해져 코드 수정이 용이하다.
- 확장성: 새로운 객체나 기능을 추가할 수 있어 확장성이 뛰어나다.
// 자동차 클래스
class Car {
private String color;
private int speed;
public Car(String color) {
this.color = color;
}
public void drive() {
System.out.println("자동차가 달립니다.");
}
public void stop() {
System.out.println("자동차가 멈춥니다.");
}
}
// 스포츠카 클래스 (Car 클래스 상속)
class SportsCar extends Car {
public SportsCar(String color) {
super(color);
}
public void turboBoost() {
System.out.println("스포츠카가 터보 모드로 달립니다!");
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
SportsCar myCar = new SportsCar("빨간색");
myCar.drive(); // 부모 클래스의 메서드 호출
myCar.turboBoost(); // 자식 클래스의 고유 메서드 호출
myCar.stop(); // 부모 클래스의 메서드 호출
}
}
SprotsCar 클래스는 Car 클래스를 상속받아 driver() 와 stop() 메서드를 사용할 수 있고, 추가로 turboBoost() 라는 새로운 메서드를 가진다.
'Java > 기본' 카테고리의 다른 글
[Java] 참조란 무엇일까? (1) | 2024.11.14 |
---|---|
[Java] 컴파일 오류? 런타임 오류? (1) | 2024.11.14 |
[Java] 순환참조 (1) | 2024.11.14 |
[Java] @NoArgsConstructor, @AllArgsConstructor (0) | 2024.11.12 |
[Java] 트랜잭션 (0) | 2024.11.11 |