일반적인 자판기의 모습을 직접 그려본다.

자판기가 수행하는 위의 기능을 자바에서는 메소드라고 한다.
소프트웨어 만들 때 가장 중요한 것은 요구사항을 정의하는 것이다. '내가 만드는 프로그램이 어떤 기능을 갖고 있지?'에 대해 잘 정의내려야한다. 자판기의 요구사항을 정의하다보면 기능 목록들과 여러 명사들이 등장하게 된다. '자판기', '동전', '물건' 같은 명사들이 객체가 될 가능성이 높고, '동전 넣기', '잔액 보여주기' 등 동사와 관련된 부분은 메소드가 될 가능성이 크다.
내가 만들고자 하는 프로그램 있다면 동작하는 모습을 그림으로 그려보는 게 좋다!
각각의 객체가 어떤 기능을 가지고 있는지 생각해보라.이는 요구사항을 정의한 뒤 설계하는 과정이다.
'객체의 이름을 어떻게 정할까?'
'객체가 어떤 메소드를 가질까?'
'혹은 또 다른 객체를 가질까?'
ex) 동전 통은 동전을 가지고, 상품 케이스는 상품을 가질 수 있다. 자판기는 액정표시장치, 동전통, 상품배출기를 가진다.
⭐️ '가진다'라는 표현에 주목.

이게 바로 분석 또는 설계 과정이다. 설계란, 객체의 이름을 정하고 객체와 객체 간의 관계를 표현하는 것이다.
참고로 강의에서는 intelliJ를 사용했지만, 필자는 IDE로 eclipse를 사용했다.




public class VendingMachine {
// field
// 생성자
// method
}
이 중괄호 블록 안에 생성자, 필드, 메소드 등을 작성할 수 있다.

클래스를 작성하면 VendingMachine.class 라는 파일이 생성된다. 터미널에서 tree 명령어를 실행하면 클래스 파일이 생성된 것을 확인할 수 있다.
c.f) tree 명령어는 터미널에서 brew install tree를 통해 별도로 설치해야 함

VendingMachine 클래스를 사용하게 하기 위해서 VendingMachineMain이라는 클래스를 추가로 만든다. 모든 클래스는 main 메소드에서부터 시작한다.
public class VendingMachineMain {
public static void main(String[] args)
VendingMachine vm1 = new VendingMachine();
}
}

new VendingMachine();처럼 new 다음에 class명() 이 나오면 인스턴스를 생성한다.new를 사용해야 클래스가 메모리에 올라가서 인스턴스가 될 수 있다.
vm1은 인스턴스를 참조하는 참조변수이다.위 코드는 VendingMachine, 즉 자판기만 메모리상에다 생성한 것이다.(실행하면 아무 동작X)

이렇게 작성하면 VendingMachine 인스턴스는 2개 생성된다.
방금까지의 과정을 그림으로 표현해본다. 다음 그림과 같이 VendingMachineMain과 VendingMachine, 두 가지의 클래스가 생성됐다.

VendingMachineMain클래스에는 메인 메소드가 들어있다. 여기서 밑줄은 static을 의미한다.

Static이 붙은 메소드를 말한다.c.f) 폰노이만의 프로그램 내장방식 : 모든 프로그램은 메모리에 올라가야지만 실행가능하다는 개념
메인 메소드를 보면 VendingMachine 클래스가 내부에서 사용되고 있다. 메소드는 기능, 행위를 뜻한다.

ex) 할아버지라는 클래스는 '걷다()'라는 기능을 갖고 있다. 걷기 위해서는 '지팡이'가 필요할 수 있다. 행위를 위해서 지팡이가 필요하다. 이렇게 의존할 때에는 클래스의 관계를 점선(⇢)으로 표현한다. '할아버지는 지팡이에 의존한다.'
메인 메소드가 동작하려면 VendingMachine 클래스가 필요하다. VendingMachine 클래스가 존재하지 않으면 컴파일 오류가 발생한다.
즉, VendingMachineMain은 VendingMachine 클래스에 의존한다.

⭐️ 메소드 안에서 사용되는 것들은 다 의존하는 것이다!
▶️ 메인 메소드를 보면 String클래스도 사용되고 있다. VendingMachineMain은 String클래스에도 의존한다.
오늘은 이상! 헤잇팅👊
🗒️ 본 게시물은 '인프런'의 <즐거운 자바>를 수강하며 기록한 개인 강의 노트입니다.