본문 바로가기

Daily Report

121009 JAVA 오버로딩 부제:사과장수

Overloading(오버로딩)

:객체 지향 컴퓨터 프로그래밍에서 다형성의 특정 경우로 다른 연산자들이 함수 인자를 통해서 구현을 할 때를 말다. 연산자 오버로딩은 일반적으로 언어, 프로그래머, 또는 두 가지 모두에 의해 정의된다.


쉽게 설명하자면 같은 생성자 매소드등에서 매개변수가 다른 생성자 매소드들을 생성하여 필요에 맞게 선택하여 사용하는 것을 뜻합니다


더 쉽게 설명하자면

 public man(){  

    1번

 }

 public man(int i){

     2번

 }

 public man(string){

    3번 

}


 객체 생성

 man m = new man();    => 1번

 man m = new man(2);   => 2번

 man m = new man("안녕하세요");    => 3번


그렇다면 이러한 오버로딩을 일상생활의 예를 통하면 구현을 해보도록 합시다


사과장수 

의 예를 통하여 이해를 해보도록 하겠습니다


"사과 장수가 사과를 팔고 있습니다"

"첫번째 사람에게 몇개를 팔고 얼마를 벌었습니다"

"두번째 사람에게 몇개를 팔고 얼마를 벌었습니다"

"세번째 사람에게 몇개를 팔고 얼마를 벌었습니다"


반대로

"첫번째 사람은 사과를 몇개 구매하고 얼마를 지출하였습니다.....생략"


설계

사과 장수가 있고 구매자가 3명있습니다

구매자는 각각 다른 수량, 단가로 사과장수로 부터 사과를 구매합니다

사과를 판매한 사과 장수에는 판매한 개수와 벌어들인 수입이 출력됩니다

사과를 구매한 구매자는 구매한 사과 개수와 지출한 금액을 출력합니다



만들려고 하는 프로그램을 간단하게 표로 나타내다면

FruitBuyer 구매자

생성자()


구매()


결과 출력()


FruitSeller 판매자

 

생성자()


판매()

결과출력()

FruitMain 

객체생성
판매자 
구매자1, 구매자2, 구매자3
 

4개의 매소드와 2개의 생성자 4개의 객체를 생성합니다


실행단계

FruitMain 객체생성 => FruitBuyer3 매소드 호출 및 FruitSeller3 값(사과개수)전달 다시 값(사과개수) 전달 및 결과 출력 => FruitBuyer3 값을 받아 결과 출력  => 종료!! 



소스보기

 package day06;

 

class FruitSeller3{

           int numOfApple;

           int myMoney;

           int Apple_Price;

 

           public FruitSeller3(int myMoney,    int numOfApple, int Apple_Price) {

                     this.myMoney = myMoney;

                     this.numOfApple = numOfApple;

                     this.Apple_Price = Apple_Price;               

           }

           public int saleApple(int price){

                     int num = price/Apple_Price;

                     numOfApple -= num;

                     myMoney += price;

                     return num;

           }

           public void showSaleResult(){

                     System.out.println("남은 사과  : " + numOfApple );

                     System.out.println("판매 수익  : " + myMoney);

           }

}

class FruitBuyer3{

           int numOfApple = 0;

           int myMoney = 10000;

                    

           public void buyApple(FruitSeller3 s, int price){

                     int num = s.saleApple(price);

                     numOfApple += num;

                     myMoney -= price;                   

           }

           public void showSaleResult(){

                     System.out.println("사과 개수  : " + numOfApple);

                     System.out.println("현제 잔액  : " + myMoney);

           }

}

public class FruitSalesMain3 {

                    

           public static void main(String[] args) {

 

                     FruitBuyer3 b = new FruitBuyer3();

                     FruitSeller3 s1 = new FruitSeller3(0,30,1500);

                     FruitSeller3 s2 = new FruitSeller3(0,20,1000);

                     FruitSeller3 s3 = new FruitSeller3(0,10,2000);

                     /*

                     //금액, 수량, 단가                               

                     s1.initMember(0,30,1500);

                     s2.initMember(0,20,1000);

                     s3.initMember(0,10,2000);           

                     */

                     b.buyApple(s1,4500);

                     b.buyApple(s2,1000);

                     b.buyApple(s3,2000);

                    

                     System.out.println(s1);

                    

                     System.out.println("---판매자1의 현재 상황");

                     s1.showSaleResult();                 

                     System.out.println("---판매자2의 현재 상황");

                     s2.showSaleResult();                 

                     System.out.println("---판매자3의 현재 상황");

                     s3.showSaleResult();                 

                                         

                     System.out.println("---구매자의 현재 상황");

                     b.showSaleResult();

           }

}