[JAVA] 객체와 객체 지향 – this키워드 와 객체 간의 협력(collaboration)

– this 키워드

자바에서 this 키워드는 현재 객체를 참조하는 데 사용됩니다. 주로 인스턴스 변수와 지역 변수의 이름이 같은 경우, 인스턴스 변수를 명시적으로 참조하기 위해 사용됩니다.
this 키워드를 사용하여 현재 객체의 인스턴스 변수에 접근할 수 있습니다.
  • 인스턴스 자신의 메모리를 가리킴
  • 생성자에서 또 다른 생성자를 호출 할 때 사용
  • 자신의 주소(참조값)을 반환 함
  • 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드
public class Person {
    private String name;
    private int age;

    public Person(){
        this("이름없음", 1);
    }
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    public Person getPerson(){
        return this;
    }

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        System.out.println(person.age);

        System.out.println(person.getPerson());
    }
}

– 객체 간의 협력(collaboration)

자바에서 객체 간의 협력은 객체지향 프로그래밍의 핵심 개념 중 하나입니다. 객체 간의 협력은 각 객체가 서로의 메시지를 주고받아 작업을 수행하는 것을 의미합니다.
객체 간의 협력은 다음과 같은 방식으로 이루어집니다.
  1. 메시지 전달: 한 객체는 다른 객체에게 메시지를 전달하여 특정 작업을 수행하도록 요청합니다. 메시지는 객체의 메서드를 호출하는 것으로, 해당 메서드가 실행되면서 객체는 요청된 작업을 수행합니다.
  2. 메서드 호출: 객체가 메시지를 받으면 해당 메서드를 호출하여 요청된 작업을 수행합니다. 이때 메서드는 객체의 상태를 변경하거나 다른 객체와의 협력을 위해 다양한 작업을 수행할 수 있습니다.
  3. 상호작용: 객체 간의 협력은 상호작용을 통해 이루어집니다. 한 객체가 다른 객체에게 메시지를 보내면, 수신 객체는 해당 메시지를 처리하고 다시 응답을 보내는 등의 상호작용이 이루어집니다.
객체 간의 협력을 통해 프로그램은 모듈화되고 유연성이 높아집니다. 각 객체는 독립적으로 작동하며, 필요에 따라 다른 객체와의 협력을 통해 복잡한 작업을 수행할 수 있습니다. 이는 코드의 재사용성을 높이고 유지보수성을 향상시키는 데 도움이 됩니다.
  • 객체 지향 프로그램에서 객체 간에는 협력이 이루어짐
  • 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현 되어야 함
  • 매개 변수로 객체가 전달되는 경우가 발생
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();

    }
}

Leave a Comment