한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지_패스트 캠퍼스 챌린지 09일차

2021. 9. 14. 23:01IT공부/Java&Spring 이용한 웹프로그래밍

13. 객체 간의 협력 (collabration)

객체 지향 프로그래밍에서의 협력

  • 객체 지향 프로그램에서 객체 간에는 협력이 이루어짐
  • 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현되어야 함
  • 매개 변수로 객체가 전달되는 경우가 발생
  • 객체 협력의 예

14. 버스 타고 학교 가는 학생의 과정을 객체 지향 프로그래밍으로 구현해보기

버스와 지하철을 타는 예제 프로그래밍

James와 Tomas는 각각 버스와 지하철을 타고 학교에 갑니다.

James는 5000원을 가지고 있었고, 100번 버스를 타면서 1000원을 지불합니다.

Tomas는 10000원을 가지고 있었고, 초록색 지하철을 타면서 1200원을 지불합니다.

두 학생이 버스와 지하철을 타는 상황을 구현해 봅시다.

 

Student.java

 

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 showInfo() {

               System.out.println(studentName +"님의 남은 돈은 " + money + "원 입니다");

            }

}

 

Bus.java

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 + "원 입니다");

   }

}

 

Subway.java

public class Subway {

        int lineNumber;

        int passengerCount;

        int money;

        public Subway(int lineNumber) {

      this.lineNumber = lineNumber;

      }

      public void take(int money) {

      this.money += money;

      passengerCount++;

     }

    public void showSubwayInfo() {

    System.out.println(lineNumber + "번 지하철의 승객은 " + passengerCount + "명 이고, 수입은 " + money + "원 입니다");

  }

}

 

TakeTransTest.java

  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(2);

          studentJ.takeBus(bus100);

          studentT.takeSubway(subwayGreen);

          studentJ.showInfo();

          studentT.showInfo();

          bus100.showBusInfo();

         subwayGreen.showSubwayInfo();

     }

}

 

16. 여러 인스턴스에서 고통으로 사용하는 변수를 선언하자 - static 변수

공통으로 사용하는 변수가 필요한 경우

  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우
  • 학생마다 새로운 학번 생성
  • 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여
  • 회사에 사원이 입사할때 마다 새로운 사번이 필요한 경우

 

static 변수 선언과 사용하기

static int serialNum;

  • 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당
  • 클래스 변수, 정적변수라고도 함(vs. 인스턴스 변수)
  • 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조

Student.serialNum = 100;

static 변수 테스트하기

Employee.java

 

public class Employee {

         public static int serialNum = 1000;

        private int employeeId;

        private String employeeName;

        private String department;

 

        public int getEmployeeId() {

       return employeeId;

       }

       public void setEmployeeId(int employeeId) {

          this.employeeId = employeeId;

        }

       public String getEmployeeName() {

         return employeeName;

       }

       public void setEmployeeName(String employeeName) {

        this.employeeName = employeeName;

        }

       public String getDepartment() {

       return department;

      }

       public void setDepartment(String department) {

      this.department = department;

       }

  }

 

EmployeeTest.java

public class EmployeeTest {

        public static void main(String[] args) {

       Employee employeeLee = new Employee();

        employeeLee.setEmployeeName("이순신");

       System.out.println(employeeLee.serialNum);

       Employee employeeKim = new Employee();

       employeeKim.setEmployeeName("김유신");

       employeeKim.serialNum++;

       System.out.println(employeeLee.serialNum);

        System.out.println(employeeKim.serialNum);

       }

  }

 

static 변수는 인스턴스에서 공통으로 사용하는 영역임음 알 수 있음

 

회사원이 입사할 때마다 새로운 사번 부여하기

Employee.java 생성자 구현

...

public Employee() {

      serialNum++;

       employeeId = serialNum;

}

...

 

EmployeeTest.java

public class EmployeeTest {

          public static void main(String[] args) {

          Employee employeeLee = new Employee();

          employeeLee.setEmployeeName("이순신");

          Employee employeeKim = new Employee();

          employeeKim.setEmployeeName("김유신");

         System.out.println(employeeLee.getEmployeeName() + "," + employeeLee.getEmployeeId());                         

         System.out.println(employeeKim.getEmployeeName() + "," + employeeKim.getEmployeeId());

      }

}

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

강의에 대해 정확하게 알고 싶다면 

https://bit.ly/37BpXiC