-
(JAVA) 객체지향 프로그래밍 예제 & toStringJAVA/컨셉 , 예제 2018. 8. 24. 13:44
객체지향 프로그래밍은 무엇일까?
모든 데이터를 오브젝트(object;물체)로 취급하여 프로그래밍 하는 방법으로, 처리 요구를 받은 객체가 자기 자신의 안에 있는 내용을 가지고 처리하는 방식 ( 출처 : http://terms.naver.com/entry.nhn?docId=1128207&cid=40942&categoryId=32837 ) 이라고 구글링하면 나온다. 개인적으로 절대 와닿지 않을 정의라고 생각한다. 심지어 정의도 굉장히 많이 나오기 때문에 무엇이 맞는 것인지도 확실하게 하기 힘든 실정이다. 따라서 이해를 토대로 자신의 정의를 확립하는 것이 중요하다고 생각한다.
내가 정립한 객체지향 프로그래밍은 "세계의 축소판"이다. 여러가지 객체들이 각기 다른 도구(변수)들을 가지고 각자의 동작(메소드)를 해내는 것이다. 이때 객체들은 다른 객체와의 상호작용이 필수적이다. 상점에서 일어나는 일을 생각해보자. 존재할 수 있는 객체로 크게 구매자와 판매자로 나눌 수 있다. 구매자는 물건을 선택해 판매자에게 돈을 지불하고 물건을 구매한다. 또한 보유 상품의 갯수를 한개 더하는 역할을 수행한다고 가정하자.
판매자는 구매자에게 물건을 판매하고, 구매자로부터 가격을 지불받는다. 또한 재고의 갯수를 하나씩 줄인다고 가정하자. 이를 클래스로 표현할 수 있다.
구매자 변수 : 물건 갯수, 소지 금액
구매자 메소드 : 물건 갯수 하나 늘리기, 소지 금액 변경하기
판매자 변수 : 물건 갯수, 소지 금액
판매자 메소드 : 물건 갯수 하나 빼기, 소지 금액 변경하기
위의 두 객체가 상호작용 하는 공간을 메인 메소드인 것이다.
메인 메소드에서 구매자와 판매자 객체를 생성하고, 이들이 상호작용하는 클래스들은 다음과 같다.package com.ktds.minwoo.buyer; import com.ktds.minwoo.seller.Seller; /** * Seller에게 상품을 구매하고 금액을 지불한다. * * 개발 순서 : 멤버 변수 -> Setter Getter -> Method * @author Admin * */ public class Buyer { /** * 상품 갯수 */ private int productNum; /** * 구매자가 가진 금액 */ private int money; public Buyer(int productNum, int money){ System.out.println("구매자 생성자 호출..."); setProductNum(productNum); // 같은 클래스 메소드명만으로 호출 가능 setMoney(money); // 현황 출력하기 생성자에서 this 호출하면 toString 메소드 호출됨 // toString Override 되어있지 않으면 객체 메모리 주소 호출됨 System.out.println(this); } // 상품 갯수 초기화 또는 갱신 public void setProductNum(int productNum){ this.productNum = productNum; } // 상품 갯수를 반환(출력용) public int getProductNum(){ return this.productNum; } // 구매자의 가진 돈 초기화 또는 갱신 public void setMoney(int money){ this.money = money; } // 구매자가 가진 돈을 반환함(출력용) public int getMoney(){ return this.money; } // 구매하기. 구매자가 가진 상품의 개수에 1 더해준다. public void buy(Seller seller){ seller.sell(this); this.productNum++; } /** * 지불하기 * 구매자가 가진 돈에서 지불할 금액을 뺀다. * @param money : 지불할 금액 */ public void pay(int money){ this.money -= money; } /** * 구매자 현황 파악하기. */ @Override public String toString(){ String msg = String.format("구매한 상품 갯수 : %d\n구매자가 가진 금액 : %d\n", this.productNum, this.money); return msg; } }Buyer 클래스
package com.ktds.minwoo.seller; import com.ktds.minwoo.buyer.Buyer; public class Seller { /** * 상품 가격 */ private final int PRICE = 2500; // 상수들은 제일 위에 /** * 판매자가 가진 금액 */ private int money; /** * 판매자가 가진 상품 갯수. */ private int productNum; public Seller(int productNum, int money){ System.out.println("판매자 생성자 호출..."); setProductNum(productNum); setMoney(money); System.out.println(this); } public void setProductNum(int productNum){ this.productNum = productNum; } public int getProductNum(){ return this.productNum; } public void setMoney(int money){ this.money = money; } public int getMoney(){ return this.money; } public void sell(Buyer buyer){ this.productNum--; // 판매자가 가진 상품의 갯수에서 하나를 뺀다 // 구매자는 돈을 지불한다. buyer.pay(PRICE); this.money += PRICE; // 판매자가 가진 금액에서 상품의 가격만큼 더한다. } /** * 재고 파악하기 * @return : boolean 재고가 있으면 false, 재고가 없으면 true */ public boolean isSoldOut(){ boolean isSoldOut = this.productNum == 0; return isSoldOut; } /** * 판매자 현황 파악하기 */ @Override public String toString(){ String msg = String.format("판매자의 상품 갯수 : %d\n판매자가 가진 금액 : %d", this.productNum, this.money); return msg; } }Seller 클래스
package com.ktds.minwoo; import com.ktds.minwoo.buyer.Buyer; import com.ktds.minwoo.seller.Seller; public class Market { public void start(){ Buyer minwoo = new Buyer(0, 50000); Seller mw = new Seller(500, 50000); minwoo.buy(mw); System.out.println(minwoo); System.out.println(mw); } public static void main(String[] args){ new Market().start(); } }Market 클래스(main)
중요한 것은 minwoo.buy(mw); 라인이다. Buyer 객체의 매개변수로 Seller 객체가 등장하고 각각의 클래스에서 서로 객체를 이용한 연산들을 하고 있음을 알 수 있다. 이러한 프로그래밍을 객체지향 프로그래밍이라고 정의할 수 있겠다.
toString() 디버깅의 용도로 주로 사용한다. 메소드는 객체의 멤버 필드 변수 값을 제어하는 방식으로 이해하면 된다. 모든 객체에 선언되어 있으며, 오버라이딩을 하지 않으면 객체의 참조 주소가 리턴된다.'JAVA > 컨셉 , 예제' 카테고리의 다른 글
(JAVA) 자바 파일 입력 & 출력 & 복사 & static (0) 2018.08.24 (JAVA) 자바 파일(File) 객체 입력 &출력 관련 메소드 (0) 2018.08.24 (JAVA) 생성자(Constructor) & Setter (0) 2018.08.24 (JAVA) 자바 문자열 출력 방법. (0) 2018.08.24 (JAVA) 자바 스캐너(Scanner)로 파일 내용 읽어오기 (0) 2018.08.24