💡 목표
1. 객체지향 패러다임이란 뭘까?
2. 객체와 객체간에 상호작용 만들어 보기
객체지향 패러다임(Object-Oriented Paradigm)은 소프트웨어를 설계하고 구현하는 방법론 중 하나로, 실세계의 객체를 모델링하여 소프트웨어의 복잡성을 관리하고 코드의 재사용성을 높이는 데 중점을 둡니다. 이 패러다임의 핵심은 프로그램을 상호작용하는 객체들의 집합으로 보고, 각 객체는 자신의 데이터와 행위를 갖는 독립적인 엔티티로 취급하는 것입니다.
💡 "엔티티(Entity)"는 특정 속성과 행동을 가진 독립적인 단위 또는 객체를 의미합니다.
지금 단계에서는 객체지향 프로그래밍이란 이렇게 기억해 보자.
💡 객체지향이란 객체와 객체간에 관계를 형성하고 상호작용하게 코드를 작성하는 것
public class Bus {
int busNumber;
int passengerCount; // 승객 수
int money; // 수익금
// 강제성
public Bus(int number) {
// 객체 생성시에 제일 먼저 실행 되는 부분
busNumber = number;
}
// 승객을 태운다.
public void take(int pay) {
// money = money + pay;
money += pay;
// passerngerCount = passerngerCount + 1;
passengerCount++;
}
// 현재 상황을 보여주는 기능을 만들어 보자.
public void showInfo() {
System.out.println("버스 번호 : " + busNumber);
System.out.println("버스 승객수 : " + passengerCount);
System.out.println("버스 수익금 : " + money);
}
}
public class Subway {
int lineNumber;
int passengerCount;
int money;
public Subway(int line) {
lineNumber = line;
}
// 지하철도 승객을 태우다.\
public void take(int pay) {
money += pay;
passengerCount++;
}
public void showInfo() {
System.out.println("지하철 번호 : " + lineNumber);
System.out.println("지하철 승객수 : " + passengerCount);
System.out.println("지하철 수익금 : " + money);
}
}
public class Subway {
int lineNumber;
int passengerCount;
int money;
public Subway(int line) {
lineNumber = line;
}
// 지하철도 승객을 태우다.\
public void take(int pay) {
money += pay;
passengerCount++;
}
public void showInfo() {
System.out.println("지하철 번호 : " + lineNumber);
System.out.println("지하철 승객수 : " + passengerCount);
System.out.println("지하철 수익금 : " + money);
}
}
실행 결과_______
전사, 마법사, 궁수
public class Warrior {
String name;
int power;
int hp;
// 생성자
public Warrior(String myName, int myPower) {
name = myName;
power = myPower;
hp = 100;
}
// Warrior 공격을 하다
// Wizard 공격을 하다
public void attackWizard(Wizard wizard) {
System.out.println("마법사를 공력(" + this.power + ") 합니다");
wizard.beAttacked(this.power); // 호출
}
// 내가 공격을 받다.
public void beAttacked(int power) {
// 방어적 코드
if(hp <= 0) {
System.out.println("이미 죽었습니다.");
return; // 실행에 흐름을 반환
}
hp = hp - power;
}
}
public class Wizard {
String name;
int power;
int hp;
public Wizard(String myName, int myPower) {
this.name = myName;
this.power = myPower;
hp = 50;
}
// 전사를 공격하다
public void attackWarrior(Warrior warrior) {
warrior.beAttacked(this.power);
}
// 내가 공격을 받다.
public void beAttacked(int power) {
// 방어적 코드
if(hp <= 0) {
System.out.println("이미 죽었습니다.");
return; // 실행에 흐름을 반환
}
hp = hp - power;
}
}
import java.util.Scanner;
public class MainTest {
// 코드의 시작점 --> 실행에 흐름을 만들 수 있다.
public static void main(String[] args) {
Warrior warrior1 = new Warrior("작은오크", 10);
Warrior warrior2 = new Warrior("큰오크", 30);
Wizard wizard1 = new Wizard("7급마법사", 20);
System.out.println("전사가 마법사을 몇번 공격하시겠습니다. ");
Scanner sc = new Scanner(System.in);
int inputData = sc.nextInt();
for(int i = 0; i < inputData; i++) {
warrior1.attackWizard(wizard1);
}
System.out.println("마법사 h1 확인 : " + wizard1.hp);
} // end of main
} // end of class
실행 결과_____
[JAVA] 기초 - this 3가지 사용 방법 (0) | 2024.05.20 |
---|---|
[JAVA] 기초 - 접근 제어 지시자 (0) | 2024.05.20 |
[JAVA] 기초 - 생성자(constructor) (0) | 2024.05.20 |
[JAVA] 기초 - RunTime Data Area (0) | 2024.05.20 |
[JAVA] 파일 입력 스트림(문자 기반 스트림) (0) | 2024.05.20 |