
new 연산자와 생성자를 이용하여 인스턴스를 만드는 방법 메모리가 굉장히 중요하다. 실행가능하다는 것은 메모리에 올라가있다는 뜻이기 때문! new 연산자 사용하면 메모리에 인스턴스가 만들어진다.
용어 잘 기억하고, 구분할 수 있어야 한다.
공간은 한정되어있는데 객체만 많아지면 문제가 될 것이다. 인스턴스를 하나씩 만들 때마다 메모리에 올라가기 때문에 필요한 개수만큼만 잘 만들어야 한다.
⭐️ 객체프로그래밍에서 인스턴스 생성이 굉장히 중요하다.
자판기를 5개 만들고 싶다면 new 연산자를 몇 번 사용해야 하는가? 5번 사용해야 한다.
클래스를 사용하는 게 아니라, 클래스의 인스턴스를 만든 후 사용하는 것이다. 그래서 클래스지향이 아니라 객체지향이다.

실제로 존재하는 객체들은 서로 관계를 맺으며 동작한다. 콘센트에 어댑터가 연결되고, 어댑터와 스마트폰에 케이블이 연결된 후 충전된다. 즉, 객체와 객체 사이의 관계를 이해하는 것이 굉장히 중요하다.
객체지향프로그래밍은 내가 만들 객체들이 메모리에 올라간 후, 어떻게 서로 관계를 맺고 동작할 지가 정리돼야 할 수 있다.
앨런 커티스 케이(객체지향의 선구자)는 객체지향의 핵심을 '메시징'이라고 했다.
훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다 모듈이 어떻게 커뮤니케이션하는가에 달려있다. - Alan Curtis Kay -
객체 사이에 관계가 있다는 말은, 객체들간에 커뮤니케이션이 일어난다는 말이다. 어떤 객체가 다른 어떤 객체에 메소드를 호출하는 것이 메시징이다.
'메소드가 언제 호출되고, 어떻게 호출될까? 메소드의 이름은 어떻게 지어야 할까?'를 고민해야 한다.
자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다.
자율적인 책임의 특징은 '객체가 어떻게 해야 하는가'가 아니라, '무엇을 해야 하는가'를 설명한다는 것이다.
출처 : 객체지향의 사실과 오해 <위키북스, 조영호>
객체가 행동하는 유일한 이유는 객체의 메소드가 호출되었기 때문이다.
ex) 자판기의 동전 잔액을 보여주는 디스플레이 장치는 어떤 책임을 가지는가? 넣은 동전의 정보를 정확히 표시해줘야 한다.

'요청'이라는 메시지가 객체에 간다는 것은 메소드를 호출하는 것을 의미한다.
//메소드 블록
[접근제한자] [static] 리턴type 메소드이름([매개변수, ...]) {
실행문
}
c.f) 대괄호([])의 부분은 생략 가능하다는 의미이다.

메인메소드를 참고하면 이해가 쉬울 것이다.
c.f) 메소드 이름은 앞에서 설명한 식별자 규칙과 같다. 다만, 메소드 이름은 소문자로 시작하는 것이 관례다. 클래스 이름은 대문자로 시작했었다.
매개변수는 메소드의 정의 부분에 나열되어있는 변수들을 말하며, 전달인자는 메소드를 호출할 때 전달되는 실제 값을 의미한다.
public String pushProductButton(int menuId)
일단 VendingMachine 클래스에 메소드 예시를 추가해보자.
//VendingMachine.java
public class VendingMachine {
//field
//생성자
//method
public String pushProductButton(int menuId) {
System.out.println(menuId + "전달받았습니다.");
return "콜라";
}
}

// VendingMachineMain.java
public class VendingMachineMain {
public static void main(String[] args) {
VendingMachine vm1 = new VendingMachine();
VendingMachine vm2 = new VendingMachine();
String product = vm1.pushProductButton(100);
System.out.println(product);
}
}

VendingMachineMain에서 메인메소드 작성 후, 디버그 모드로 프로그램이 어떻게 실행되는지 확인해본다.


VendingMachineMain 3번째 줄에 브레이크포인트를 잡고(클릭), 디버그 모드로 실행한다.(벌레모양 아이콘)

(왼쪽이 Step into(단축키 F7), 오른쪽이 Step over(단축키 F8)
Step over 버튼을 누를 때마다 다음 줄이 실행된다. 메소드 안의 내용이 어떻게 실행되는지 궁금하다면 Step into 버튼을 눌러서 확인하면 된다.

menuID에 100이 전달되었다.

Step over버튼을 누르며 다음 줄을 실행하면 '콜라'가 리턴되는 것을 볼 수 있다.

리턴된 '콜라'는 product 변수가 참조하게 된다.

디버깅 모드가 끝나면 '콜라'가 출력된다.
c.f) 디버깅 모드로 실행하면 코드가 어떤 순서로 실행되는지 더 잘 이해할 수 있다. 디버깅 모드 끝나면 브레이크포인트는 삭제해준다.
오늘은 여기까지! 쉬운 내용이라 빨리 진도 빼고 싶은데, 자바 기본 개념에 대해 아직 막연한 지식을 가지고 있기 때문에 기본기를 제대로 쌓는 시간이라고 생각하자.
그림, 비유, 예시들로 직관적인 눈을 열게 되는 느낌이라 좋다.
오늘 하루도 헤이팅👊
🗒️ 본 게시물은 '인프런'의 <즐거운 자바>를 수강하며 기록한 개인 강의 노트입니다.