Java | 객체지향문법(3) - 자판기 만들어보기

heige·2023년 7월 10일
0

Java

목록 보기
3/21
post-thumbnail

자판기 만들어보기

자판기를 그려보자.

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

필요한 동작은?

  • 동전 넣기
  • 잔액 보여주기
  • 물건 선택 버튼 클릭하기
  • 물건 뱉기

자판기가 수행하는 위의 기능을 자바에서는 메소드라고 한다.

소프트웨어 만들 때 가장 중요한 것은 요구사항을 정의하는 것이다. '내가 만드는 프로그램이 어떤 기능을 갖고 있지?'에 대해 잘 정의내려야한다. 자판기의 요구사항을 정의하다보면 기능 목록들과 여러 명사들이 등장하게 된다. '자판기', '동전', '물건' 같은 명사들이 객체가 될 가능성이 높고, '동전 넣기', '잔액 보여주기' 등 동사와 관련된 부분은 메소드가 될 가능성이 크다.
내가 만들고자 하는 프로그램 있다면 동작하는 모습을 그림으로 그려보는 게 좋다!

자판기는 어떤 객체로 구성되는가?

  • 액정표시장치 : 남은 잔액 출력
  • 동전통
  • 상품배출기
  • 상품케이스(상품 여러 개 저장)
  • 상품
  • 동전
  • 동전 배출기
  • 상품 선택 버튼
  • 동전 배출 버튼
  • 이것을 담은 자판기

각각의 객체가 어떤 기능을 가지고 있는지 생각해보라.이는 요구사항을 정의한 뒤 설계하는 과정이다.
'객체의 이름을 어떻게 정할까?'
'객체가 어떤 메소드를 가질까?'
'혹은 또 다른 객체를 가질까?'
ex) 동전 통은 동전을 가지고, 상품 케이스는 상품을 가질 수 있다. 자판기는 액정표시장치, 동전통, 상품배출기를 가진다.

⭐️ '가진다'라는 표현에 주목.

  • 자판기 1개는 상품 케이스 여러 개를 가진다.
  • 자판기 1개는 동전통 1개를 가진다.
  • 상품 케이스 1개는 상품을 여러 개 가진다.
  • 자판기는 배출기, 상품배출기도 가진다.

이게 바로 분석 또는 설계 과정이다. 설계란, 객체의 이름을 정하고 객체와 객체 간의 관계를 표현하는 것이다.

자판기 클래스 만들기

자판기 클래스를 만들어보자

클래스 생성

참고로 강의에서는 intelliJ를 사용했지만, 필자는 IDE로 eclipse를 사용했다.

  • 새로운 Java Project를 만든다.
  • VendingMachine(자판기) Class를 생성한다.


public class VendingMachine {
// field 
// 생성자
// method
}

이 중괄호 블록 안에 생성자, 필드, 메소드 등을 작성할 수 있다.

  • 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개 생성된다.

그림으로 표현

방금까지의 과정을 그림으로 표현해본다. 다음 그림과 같이 VendingMachineMainVendingMachine, 두 가지의 클래스가 생성됐다.

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

  • 클래스메소드
    (1) Static이 붙은 메소드를 말한다.
    (2) ⭐️ 클래스메소드는 인스턴스 만들지 않아도 사용 가능하다. (= 메모리에 올라가있다)

    c.f) 폰노이만의 프로그램 내장방식 : 모든 프로그램은 메모리에 올라가야지만 실행가능하다는 개념

메인 메소드를 보면 VendingMachine 클래스가 내부에서 사용되고 있다. 메소드는 기능, 행위를 뜻한다.

ex) 할아버지라는 클래스는 '걷다()'라는 기능을 갖고 있다. 걷기 위해서는 '지팡이'가 필요할 수 있다. 행위를 위해서 지팡이가 필요하다. 이렇게 의존할 때에는 클래스의 관계를 점선(⇢)으로 표현한다. '할아버지는 지팡이에 의존한다.'

메인 메소드가 동작하려면 VendingMachine 클래스가 필요하다. VendingMachine 클래스가 존재하지 않으면 컴파일 오류가 발생한다.
즉, VendingMachineMain은 VendingMachine 클래스에 의존한다.

⭐️ 메소드 안에서 사용되는 것들은 다 의존하는 것이다!
▶️ 메인 메소드를 보면 String클래스도 사용되고 있다. VendingMachineMain은 String클래스에도 의존한다.

오늘은 이상! 헤잇팅👊


🗒️ 본 게시물은 '인프런'의 <즐거운 자바>를 수강하며 기록한 개인 강의 노트입니다.

profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글