Java를 배우는 데에 있어서 객체 지향 프로그래밍은 너무나도 중요한 개념입니다.
쉽게 이해할 수 있도록 포스팅하겠습니다.
정의
객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
출처 : 위키백과
객체를 여러개의 독립된 단위로 객체 간 상호작용을 하며 프로그래밍 한다고 하는데 그렇다면 객체는 또 무엇일까요?
객체란 개발에서 사용되는 다양한 엔터티를 모델링하고 구성하기 위한 기본 빌딩 블록이며 속성과 행위(메서드)를 가지고 있으며 속성은 객체의 상태 즉, 특징이나 특성을 나타냅니다.
행위(메서드, Method)는 특정한 행위(또는 동작)를 수행할 수 있는 능력을 가집니다. 이러한 행위는 객체가 수행할 수 있는 작업 또는 함수를 나타내며 다른 객체와 상호 작용할 수 있도록 돕습니다.
예를 들어 자동차를 객체로 생각한다면 브랜드, 모델, 색상 등이 속성이라고 볼 수 있고
주행, 정지, 방향 전환 등이 행위(메서드)라고 볼 수 있습니다.
추상화
- 객체에서 공통된 속성과 행위를 추출
- 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
- 불필요한 정보는 숨기고 중요한 정보만을 표현함으로 프로그램을 간단하게 만든다.
사진을 보면 벤츠와 테슬라는 디자인도 모양도 색상도 다르지만 바퀴, 핸들, 창문 등 공통적인 부분이 있죠?
자동차라는 추상화 집단을 만들어두고 자동차들이 가진 공통적인 특징들을 만들어 활용합니다.
코드로 예를 들어보면
// 추상 클래스: 차량 (Vehicle) 정의
public abstract class Vehicle {
private String make;
private String model;
private int year;
public Vehicle(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
// 추상 메서드: 주행 기능
public abstract void drive();
public void printInfo() {
System.out.println("제조사: " + make);
System.out.println("모델: " + model);
System.out.println("연도: " + year);
}
}
// 자동차 (Car) 클래스: 차량을 상속
public class Car extends Vehicle {
public Car(String make, String model, int year) {
super(make, model, year);
}
// 주행 메서드를 구체적으로 구현
@Override
public void drive() {
System.out.println("자동차가 도로를 주행합니다.");
}
}
// 전기 자동차 (ElectricCar) 클래스: 차량을 상속
public class ElectricCar extends Vehicle {
public ElectricCar(String make, String model, int year) {
super(make, model, year);
}
// 전기 자동차의 주행 메서드를 구체적으로 구현
@Override
public void drive() {
System.out.println("전기 자동차가 무소음으로 주행합니다.");
}
}
public class Main {
public static void main(String[] args) {
Vehicle car = new Car("Hyundai", "Sonata", 2022);
Vehicle electricCar = new ElectricCar("Tesla", "Model 3", 2022);
car.printInfo();
car.drive();
System.out.println();
electricCar.printInfo();
electricCar.drive();
}
}
이 코드에서 "Vehicle" 클래스는 추상 클래스로, 모든 차량의 공통 특성을 정의합니다. "Car" 및 "ElectricCar" 클래스는 "Vehicle" 클래스를 상속받고 "drive" 메서드를 구체적으로 구현합니다.
추상화를 통해 "Vehicle" 클래스는 모든 차량의 공통 특성을 정의하고, 각 차량 유형은 이러한 공통 특성을 확장하고 특수화할 수 있습니다. 이로써 코드 재사용성과 유지 보수성이 향상되며, 차량 유형의 확장이 용이해집니다.
이렇게 추상화에 대해서 알아보았고 다음은 캡슐화에대한 포스팅을 하겠습니다.
'Study' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) - 캡슐화 (3) (0) | 2023.10.16 |
---|---|
[Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) - 상속 (2) (0) | 2023.10.16 |
공공데이터포털 사용해보기 feat.호갱고고(아파트 실거래 정보 조회) (1) | 2023.10.11 |
[chatGPT]자바(java) 개발 도구와 생태계: 효율적인 자바 개발을 위한 핵심 도구들 (0) | 2023.10.11 |
[java] Stream (스트림) 파헤치기 (0) | 2023.10.11 |