4. 명령형 - 객체 지향
Q. 현실 세계를 단 2가지만으로 분류한다면?(단, 중복, 배제되는 부분 없이, MECE )
분류 방법
→ 나, 그리고 나를 제외한 모든 것으로 분류
나를 주체(主體, Subject)
나를 제외한 모든 것은 객체(客體, Object)라고 표현할 때,
(물론 상대방 입장에서는 내가 객체가 될 수 있음)
프로그램을 작성하는 나(개발자)는 주체(S, Subject)
프로그램의 소스 코드로 작성될(?) 나를 제외한 모든 것은 객체(O, Object)
1. 객체 지향 프로그래밍의 기본 사상 및 지향점
“세상에 존재하는 모든 것은 ‘사물(Object)‘이다.”
물 분자부터 우주까지 이 세상의 모든 것들이 각각의 객체(Object)로 이루어져 있다고 할 때,
객체 지향 프로그래밍의 기본 사상이자 지향점은,
인간(즉, 주체이자 개발자인 나)이
세상에 존재하는 모든 사물(즉, 객체이며 나를 제외한 모든 것)을 인식하고 이해하는 방식처럼,
이러한 관점을 프로그래밍에 적용해보자는 것
→ 세상을 나와 내가 아닌 모든 것(객체)으로 나누고,
인간이 사물을 보고 이해하듯이 그 관계와 행동을 코드로 모델링하는 방식
정리하면, 객체 지향 프로그래밍의 기본 사고 방식이자 핵심 특징은 다음과 같음
- 세상에 존재하는 모든 것은 사물, 즉 객체(Object) 이다
ex. 사람이라는 객체, 호랑이라는 객체- 각각의 개별 사물(instance)은 고유함
ex. 실세계에서 나는 고유하게 존재하기 때문- 사물은 속성(Field)과 행위(Method)를 가질 수 있음
ex. 나는 이름이 있고, 노래를 할 수 있음
💡
Tip
영어 문장의 5형식
S V - 1형식
S V C - 2형식
S V O - 3형식
2. 객체 지향 프로그래밍 언어
객체 지향 방식으로 작성하는 대표적인 프로그래밍 언어는 Java, C++
앞서 살펴본 주문/결제를 수행하는 프로그램을 Java로 작성한 예시는 다음과 같음
Java로 작성한 주문/결제를 수행하는 프로그램 코드
Main.java
// 주문 관련 클래스
class Order {
private int menuNumber;
private int price;
public void selectMenu(int menuNumber) {
this.menuNumber = menuNumber;
if (menuNumber == 1) price = 3000;
else if (menuNumber == 2) price = 4000;
else price = 0;
}
public int getPrice() {
return price;
}
public boolean isValid() {
return price > 0;
}
}
// 결제 관련 클래스
class Payment {
public void process(int amount, int price) {
if (amount >= price) {
System.out.println("결제가 완료되었습니다. 거스름돈: " + (amount - price) + "원");
} else {
System.out.println("결제 실패: 금액이 부족합니다.");
}
}
}
// 실행 클래스
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Order order = new Order();
System.out.print("메뉴를 선택하세요 (1. 김밥 - 3000원, 2. 라면 - 4000원): ");
int menu = scanner.nextInt();
order.selectMenu(menu);
if (!order.isValid()) {
System.out.println("잘못된 메뉴입니다.");
return;
}
System.out.println("주문 완료. 총 금액은 " + order.getPrice() + "원입니다.");
System.out.print("결제 금액을 입력하세요: ");
int amount = scanner.nextInt();
Payment payment = new Payment();
payment.process(amount, order.getPrice());
}
}Last updated on