– 객체 간의 협력(collaboration)
자바에서 객체 간의 협력은 객체지향 프로그래밍의 핵심 개념 중 하나입니다. 객체 간의 협력은 각 객체가 서로의 메시지를 주고받아 작업을 수행하는 것을 의미합니다.
객체 간의 협력은 다음과 같은 방식으로 이루어집니다.
- 메시지 전달: 한 객체는 다른 객체에게 메시지를 전달하여 특정 작업을 수행하도록 요청합니다. 메시지는 객체의 메서드를 호출하는 것으로, 해당 메서드가 실행되면서 객체는 요청된 작업을 수행합니다.
- 메서드 호출: 객체가 메시지를 받으면 해당 메서드를 호출하여 요청된 작업을 수행합니다. 이때 메서드는 객체의 상태를 변경하거나 다른 객체와의 협력을 위해 다양한 작업을 수행할 수 있습니다.
- 상호작용: 객체 간의 협력은 상호작용을 통해 이루어집니다. 한 객체가 다른 객체에게 메시지를 보내면, 수신 객체는 해당 메시지를 처리하고 다시 응답을 보내는 등의 상호작용이 이루어집니다.
객체 간의 협력을 통해 프로그램은 모듈화되고 유연성이 높아집니다. 각 객체는 독립적으로 작동하며, 필요에 따라 다른 객체와의 협력을 통해 복잡한 작업을 수행할 수 있습니다. 이는 코드의 재사용성을 높이고 유지보수성을 향상시키는 데 도움이 됩니다.
- 객체 지향 프로그램에서 객체 간에는 협력이 이루어짐
- 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현 되어야 함
- 매개 변수로 객체가 전달되는 경우가 발생
public class Bus {
int busNumber;
int passengerCount;
int money;
public Bus(int busNumber){
this.busNumber = busNumber;
}
public void take(int money){
this.money += money;
passengerCount++;
}
public void showBusInfo(){
System.out.println(busNumber + "번의 버스 승객은 " + passengerCount + "명 이고, 수입은" + money + "원 입니다.");
}
}
public class Subway {
String lineNumber;
int passengerCount;
int money;
public Subway(String lineNumber){
this.lineNumber = lineNumber;
}
public void take(int money){
this.money += money;
passengerCount++;
}
public void showSubwayInfo(){
System.out.println(lineNumber + "지하철 승객은 " + passengerCount + "명 이고, 수입은" + money + "원 입니다.");
}
}
public class Student {
String studentName;
int grade;
int money;
public Student(String studentName, int money){
this.studentName = studentName;
this.money = money;
}
public void takeBus(Bus bus){
bus.take(1000);
this.money -= 1000;
}
public void takeSubway(Subway subway){
subway.take(1200);
this.money -= 1200;
}
public void showStudentInfo(){
System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
}
}
public class TakeTransTest {
public static void main(String[] args) {
Student studentJ = new Student("James", 5000);
Student studentT = new Student("Tomas", 10000);
Bus bus100 = new Bus(100);
Subway subwayGreen = new Subway("초록색");
studentJ.takeBus(bus100);
studentT.takeSubway(subwayGreen);
studentJ.showStudentInfo();
studentT.showStudentInfo();
bus100.showBusInfo();
subwayGreen.showSubwayInfo();
}
}