수업내용/Java

[2022.09.14.수] 메소드

주니어주니 2022. 9. 14. 20:00

 

1. 메소드 (기능) 

 

1-1. 메소드의 작성 목적

  • 중복된 코드 제거
  • 코드의 재사용성 향상
  • 코드의 가독성  

1-2. 메소드 형식 

접근제한자 반환타입 메소드이름(매개변수타입 매개변수명, 매개변수타입 매개변수명, ...)  {
                 수행문;
                 수행문;
                 수행문;
}

public static void main(String[] args) { 


출력하기 {
                System.out.println("이름: "+...);               
                System.out.println("이름: "+...); 
                System.out.println("이름: "+...); 

 

  • 메소드의 선언부
    : 접근제한자 반환타입 메소드이름(매개변수타입 매개변수명, 매개변수타입 매개변수명, ...)
    •  접근제한자 ( ex. public ) 
      - 이 메소드의 공개범위 지정 (전체공개, 패키지 공개, 비공개) 
      - 메소드는 대부분 전체공개로 지정
      - public 접근제한자는 메소드 전체공개
      - private 접근제한자는 메소드 비공개 

    • 반환타입 ( ex. void ) 
      - 이 메소드의 최종 결과값의 데이터타입 지정
      - 반환타입은 void, void와 아닌 경우로 구분
      - 반환타입이 void : 이 메소드는 값을 반환하지 않는 메소드
      - 이 메소드를 실행하고나서 획득된 값의 타입. 획득된 값을 저장하는 변수를 정의할 때 꼭 필요한 정보. 

    • 메소드이름 ( ex. main ) 
      - 수행문을 포함하고 있는 코드블록의 이름
      - 메소드이름은 동사로 시작하고, 코드블록 내의 수행문이 수행하는 작업을 잘 드러내는 이름

    • 매개변수타입과 매개변수명 ( ex. (String[] args) ) 
      - 이 메소드 실행시 전달받는 값의 타입과 그 값을 저장하는 변수의 이름 지정
      - 전달받는 값이 없으면 생략 가능

 

 

 

반환(획득)하는 값 - 기본자료형의 값, 배열, 객체

전달받는 값 - 기본자료형의 값, 배열, 객체

전달받은 값을 어디다가 저장해야돼 -> 매개변수 (변수타입 변수명) 

매개변수에 들어있는 값을 꺼내서 수행문에서 사용 

 

 

  • 메소드 4가지 유형

1) 매개변수: 없음, 반환타입: 없음 - public void test() { ... } 

    예시)  - 회원정보 전체 삭제 (전달받을 값, 반환값 필요 x) 

 

2) 매개변수: 없음, 반환타입: 있음 - public 타입 test() { ... } 

   예시)  - 회원정보 전체 조회 -> 전체 회원정보가 획득됨

          - 전체 사원 수 조회 -> 사원 수 획득

          - 전체 평균점수 조회 -> 평균점수 획득

 

3) 매개변수: 있음, 반환타입: 없음 - public void test(타입 변수명, 타입 변수명) { ... } 

   예시)  - 회원번호에 해당하는 회원정보 삭제 (회원번호를 전달받아야 함 -> 변수 필요)

          - 사원번호에 해당하는 사원의 급여 인상 (사원번호, 인상액) 

 

4) 매개변수: 있음, 반환타입: 있음 - public 타입 test(타입 변수명, 타입 변수명) { ... } 

    예시) - 제목을 전달받아서 제목을 포함하고 있는 도서정보 조회

                 -> 제목을 전달받음

                 -> 제목을 포함하고 있는 도서정보 획득

             - 지정된 날짜의 매출액 조회

                 -> 날짜를 전달받음

                 -> 매출액 조회
       

 

  • 매개변수 x -> 범위가 없는 전체 조회

    반환타입
    반환타입 x -> 변경할 때 
    반환타입 o -> 조회할 때 

 

  • 메소드 예시)
    • public void increaseSalary(int employeeNo, int amount) { ... }
      // 급여를 인상시키는 메소드
      // 사원번호, 인상액을 전달받으려고 하는구나

    • public void deleteUsers(String userId) { ...}
      // 유저정보를 삭제하는 메소드
      // 유저 아이디를 전달받으려고 하는구나

    • public List<Order> getOrders(Date startDate, Date endDate) { ... }
      // 해당 기간 동안의 주문정보를 제공하는 메소드
      // 시작일자, 종료일자를 전달받으려고 하는구나

    • public void removeAllUsers() { ... }
      // 모든 사용자의 정보를 삭제하는 메소드

    • public int getAllStudentsCount() { ... }
      // 모든 학생수를 제공하는 메소드 

 

 

  • 메소드의 구현부
    : 수행문을 포함하고 있는 코드블록
      매개변수가 있는 경우, 메소드 실행시 전달한 값을 사용해서 수행문 실행
      반환타입이 void가 아닌 경우, 메소드의 구현부에서는 반드시 값을 반환하는 return문이 있어야 함

      * return문 사용예시
         return;          반환타입이 void인 메소드에서만 사용가능.
                             실행중인 메소드를 종료.
                             생략 가능 
         return 값;     반환타입이 void가 아닌 메소드에서만 사용가능.
                             실행중인 메소드를 종료하고, 지정된 값 반환
                             생략 불가 

 

 

  • Score 클래스 생성

package day8;

public class Score {

	// Score클래스의 멤버변수 정의 = Score객체를 생성할 수 있게 만든 것 
	String name; 
	int kor; 
	int eng; 
	int math; 
	int total; 
	double average; 
	boolean isPassed;

 

 

  • Score객체를 생성해서 score1, score2, score3 변수에 대입
    score1이 참조하는 객체, score2가 참조하는 객체, score3이 참조하는 객체, 총 객체 3개 
    (new 할 때마다 Score객체가 따로, 새로 만들어진거)

package day8;

public class ScoreApp2 {

	public static void main(String[] args) {
		
		// 김유신, 이순신, 류관순의 성적정보를 각각 저장하는 Score객체 생성하기
		// score1이 참조하는 객체, score2가 참조하는 객체, score3이 참조하는 객체, 총 객체 3개
		Score score1 = new Score();
		score1.name = "김유신";	//score1이 참조하는 객체의 name변수에 대입할 값
		score1.kor = 100;
		score1.eng = 90;
		score1.math = 80; 
		score1.total = score1.kor + score1.eng + score1.math;
		score1.average = (double) score1.total/3;
		score1.isPassed = score1.average >= 60;
		
		Score score2 = new Score();
		score2.name = "이순신";	
		score2.kor = 90;
		score2.eng = 80;
		score2.math = 70; 
		score2.total = score2.kor + score2.eng + score2.math;
		score2.average = (double) score2.total/3;
		score2.isPassed = score2.average >= 60;
		
		Score score3 = new Score(); 
		score3.name = "류관순";	
		score3.kor = 80;
		score3.eng = 70;
		score3.math = 60; 
		score3.total = score3.kor + score3.eng + score3.math;
		score3.average = (double) score3.total/3;
		score3.isPassed = score3.average >= 60;
		
		System.out.println("김유신의 성적정보");
		System.out.println("이름: "+score1.name);
		System.out.println("국어: "+score1.kor);
		System.out.println("영어: "+score1.eng);
		System.out.println("수학: "+score1.math);
		System.out.println("총점: "+score1.total);
		System.out.println("평균: "+score1.average);
		System.out.println("합격여부: "+score1.isPassed);
		
		System.out.println("이순신의 성적정보");
		System.out.println("이름: "+score2.name);
		System.out.println("국어: "+score2.kor);
		System.out.println("영어: "+score2.eng);
		System.out.println("수학: "+score2.math);
		System.out.println("총점: "+score2.total);
		System.out.println("평균: "+score2.average);
		System.out.println("합격여부: "+score2.isPassed);
		
		System.out.println("류관순의 성적정보");
		System.out.println("이름: "+score3.name);
		System.out.println("국어: "+score3.kor);
		System.out.println("영어: "+score3.eng);
		System.out.println("수학: "+score3.math);
		System.out.println("총점: "+score3.total);
		System.out.println("평균: "+score3.average);
		System.out.println("합격여부: "+score3.isPassed);
	}
}

 

 

* 근데 이게 너무 길고, 중복되는게 너무 많아!  ---> 메소드 이용

 

 

  • 1) 이름, 국어, 영어, 수학점수를 전달받아서 객체의 멤버변수에 대입하는 메소드
    2) 총점, 평균, 합격여부 계산해서 지정하는 메소드
    3) 성적정보를 출력하는 메소드 
    이 메소드를 Score 클래스에 생성

package day8;

public class Score {

	// Score클래스의 멤버변수 정의 = Score객체를 생성할 수 있게 만든 것 
	String name; 
	int kor; 
	int eng; 
	int math; 
	int total; 
	double average; 
	boolean isPassed; 
    
   	// 이름, 국어, 영어, 수학점수를 전달받아서 객체의 멤버변수에 대입하는 메소드 
	// 접근제한 : public
	// 반환타입 : void (값 반환(획득) 없이 화면에 출력만 할거니까)
	// 메소드이름 : setScore
	// 매개변수 : String studentName, int korScore, int engScore, int mathScore 
	public void setScore(String studentName, int korScore, int engScore, int mathScore) {
		name = studentName;
		kor = korScore; 
		eng = engScore;
		math = mathScore;
	}
	
	
	// 속성에 저장된 국어, 영어, 수학점수로 총점과 평균을 계산하여 저장하고, 합격여부를 지정하는 메소드
	// 접근제한 : public
	// 반환타입 : void (값 반환 없이 화면에 출력만 할거니까)
	// 메소드이름 : processScore
	// 매개변수 : 없음 (전달받을 값 없음) 
	public void processScore() { 
		total = kor + eng + math; 
		average = (double) total / 3;
		isPassed = average >= 60; 
	}
	
	
	// 모든 성적정보를 화면에 출력하는 메소드 
	// 접근제한자 : public 
	// 반환타입 : void 
	// 메소드이름 : printScore 
	// 매개변수 : 없음
	public void printScore() {  
		System.out.println("["+name+"] 성적정보를 출력합니다");
		System.out.println("이름: " + name);
		System.out.println("국어: " + kor);
		System.out.println("영어: " + eng);
		System.out.println("수학: " + math);
		System.out.println("총점: " + total);
		System.out.println("평균: " + average);
		System.out.println("합격여부: " + isPassed);
		System.out.println();
	}
}

 

  • 메소드를 통해 중복된 코드 줄임
package day8;

public class ScoreApp2 {

	public static void main(String[] args) {
		
        	// 김유신, 이순신, 류관순의 성적정보를 각각 저장하는 Score객체 생성하기
		// score1이 참조하는 객체, score2가 참조하는 객체, score3이 참조하는 객체, 총 객체 3개
		Score score1 = new Score();
		score1.setScore("김유신", 100, 90, 80); //"김유신"이 studentName, 100이 korScore, 90이 engScore, 80이 mathScore에 저장됨
		score1.processScore();
      	  	score1.printScore(); //score1이 바라보는 객체 안에 있는 printScore 메소드 실행
		
		Score score2 = new Score();
		score2.setScore("이순신", 90, 80, 70);
		score2.processScore();
      		score2.printScore();

		Score score3 = new Score(); 
		score3.setScore("류관순", 80, 70, 60);
		score3.processScore(); 
      	 	score3.printScore(); 
		
	}
}

 

[김유신] 성적정보를 출력합니다
이름: 김유신
국어: 100
영어: 90
수학: 80
총점: 270
평균: 90.0
합격여부: true

[이순신] 성적정보를 출력합니다
이름: 이순신
국어: 90
영어: 80
수학: 70
총점: 240
평균: 80.0
합격여부: true

[류관순] 성적정보를 출력합니다
이름: 류관순
국어: 80
영어: 70
수학: 60
총점: 210
평균: 70.0
합격여부: true

 

 

 

  • Score 클래스 - Score객체를 생성하기 위한 설계도 (설계도로는 아무것도 할 수 없음)
    • 필드    (객체의 속성)
                  학생이름, 국어, 영어, 수학, 총점, 평균, 합격여부
    • 메소드 (객체의 기능)
                  성적입력 기능, 성적처리 기능, 성적출력 기능

  • Score 객체 - 관리할 성적정보가 있을 때, 성적정보 하나당 객체 한 개
    • 객체의 속성에 성적정보를 저장하고 유지할 수 있다.
    • 객체의 기능을 실행해서 필요한 작업을 수행할 수 있다. 
    • 관리할 성적정보의 수만큼 Score 객체를 생성
      -> 그럼 성적정보의 수가 많아지면? 

  • Score 배열 객체 - 성적정보 여러개 관리할 때 
    • Score[ ] scores = new Score[100];     (아예 안씀) 

  • Score 콜렉션 객체 - 성적정보 여러개를 관리할 때 
    • Set<Score> scores = new HashSet<>(); 
    • List<Score> scores = new ArrayList<>();    (이거를 젤 많이 씀) 

 

 

 

  • 배열객체에 저장된 성적정보 출력하기

package day8;

public class ScoreApp3 {

	public static void main(String[] args) {
		
		// 학생성적정보를 3개 저장하는 Score배열 객체를 생성하고, 학생성적정보를 3개 저장한다.	
		// scores는 Score객체를 3개 저장하는 배열객체를 참조하는 참조변수
		Score[] scores = new Score[3];
		
		Score score1 = new Score();
		score1.setScore("김유신", 80, 100, 70);
		Score score2 = new Score();
		score2.setScore("강감찬", 70,	50, 60);
		Score score3 = new Score();
		score3.setScore("홍길동", 50, 40, 50);
		
		// scores 참조변수가 참조하는 배열객체의 0번째, 1번째, 2번째 칸에 위에서 생성한 Score객체 저장하기
		scores[0] = score1;		//참조변수 score1가 참조하는 배열객체 scores의 0번째 칸에 score1의 주소값
		scores[1] = score2;
		scores[2] = score3;
		
		// scores 참조변수가 참조하는 배열객체에 저장된 모든 성적정보 출력하기
		for (Score score : scores ) { //배열에서 하나씩 꺼내서 Score에 있는 메소드(기능) 실행
			score.processScore();
			score.printScore();
		}
	}
}

 

[김유신] 성적정보를 출력합니다
이름: 김유신
국어: 80
영어: 100
수학: 70
총점: 250
평균: 83.33333333333333
합격여부: true

[강감찬] 성적정보를 출력합니다
이름: 강감찬
국어: 70
영어: 50
수학: 60
총점: 180
평균: 60.0
합격여부: true

[홍길동] 성적정보를 출력합니다
이름: 홍길동
국어: 50
영어: 40
수학: 50
총점: 140
평균: 46.666666666666664
합격여부: false

 

 

 

 

 

  • Score[ ] scores = new Score[5];
    // score객체 5개를 담을 수 있는 배열객체 scores 를 생성해서 그 배열객체의 주소값을 scores 변수에 대입
  • Score score1 = new Score( );
    // Score객체를 생성해서 score1 변수에 대입
  • score1.setScore("김유신", 100, 90, 80);
    // score1이 가리키는 객체 안에 있는 setScore메소드를 이용해서 값을 대입
  • score[0] = score1; 
    // score1의 주소값을 scores배열의 0번째 칸에 대입 = score[0]도 score1이 참조하는 Score객체의 주소값을 가지게 됨
  • Score score2 = new Score( );  
    score2.setScore("이순신", 90, 80, 70); 
    scores[1] = score2; 
    // score2도 똑같이 진행
  • for ( Score score : scores)  {          // ( 변수타입(Socre) 변수명 : 배열) 
           score.processScore( );
           score.printScore( );

    // 향상된 for문 - 배열의 0번째부터 끝까지 각 저장소에 저장된 값을 순서대로 꺼내서 저장된 변수에 저장하고 블록내의 수행문 실행
    ( * scores 참조변수가 참조하는 배열의 각 저장소에는 Score객체의 주소값이 저장되어 있다
    향상된 for문을 이용해서 각 저장소에서 순서대로 꺼내는 값은 Score객체의 주소값
    따라서, scores 배열에서 하나씩 추출한 값을 Score 타입의 변수score에 저장 )

 

 

  • 키보드로 학생이름, 국어, 영어, 수학 점수를 입력받아서 성적을 출력하기

 

import utils.KeyboardReader;

public class ScoreApp4 {
	
	public static void main(String[] args) {
		// 키보드로 학생이름, 국어, 영어, 수학 점수를 입력받아서 성적을 출력하는 프로그램 
		KeyboardReader keyboard = new KeyboardReader();
		
		// 학생성적 3개를 저장하는 배열객체 생성하기 
		Score[] scores = new Score[3];
		
		// 3번 반복할 일 (정보를 3번씩 입력받아서 3번씩 저장하고, 3번씩 출력) 
		for(int index=0; index<scores.length; index++) {
			// 학생이름, 국어, 영어, 수학점수를 입력받기
			System.out.print("이름을 입력하세요.");
			String name = keyboard.getString();
			System.out.print("국어점수를 입력하세요.");
			int kor = keyboard.getInt(); 
			System.out.print("영어점수를 입력하세요.");
			int eng = keyboard.getInt();
			System.out.print("수학점수를 입력하세요.");
			int math = keyboard.getInt();
			
			// 입력된 성적정보를 저장할 Score객체 생성하고, setScore() 메소드를 실행해서 생성된 Score객체의 멤버변수에 값을 대입시킨다.
			Score score = new Score(); 			// 각자 다른 새로운 객체를 만들어야 하기 때문에 for문 안에 있어야 함 
			score.setScore(name, kor, eng, math); //이 setScore의 변수이름은 이 클래스 내에서만 동일하면 됨
			
			// 배열에 Score객체를 저장하기 
			scores[index] = score; //인덱스가 0일때, Score객체 만들어서 저장하고 ... 
		
			System.out.println("배열의 ["+index+"]번째에 성적정보가 저장되었습니다.");
			System.out.println();
		}
		
		// 배열에 저장된 학생 성적정보 출력하기
		System.out.println("-------------------------");
		for(Score score : scores) {   // 처음부터 끝까지 뽑을거라서 향상된for문, score는 위의 변수랑 상관 x. 위는 끝났음
			score.processScore();
			score.printScore();
		}
	}
}

 

이름을 입력하세요.김유신
국어점수를 입력하세요.100
영어점수를 입력하세요.80
수학점수를 입력하세요.70
배열의 [0]번째에 성적정보가 저장되었습니다.

이름을 입력하세요.강감찬
국어점수를 입력하세요.70
영어점수를 입력하세요.60
수학점수를 입력하세요.70
배열의 [1]번째에 성적정보가 저장되었습니다.

이름을 입력하세요.이순신
국어점수를 입력하세요.100
영어점수를 입력하세요.60
수학점수를 입력하세요.60
배열의 [2]번째에 성적정보가 저장되었습니다.

-------------------------
[김유신] 성적정보를 출력합니다
이름: 김유신
국어: 100
영어: 80
수학: 70
총점: 250
평균: 83.33333333333333
합격여부: true

[강감찬] 성적정보를 출력합니다
이름: 강감찬
국어: 70
영어: 60
수학: 70
총점: 200
평균: 66.66666666666667
합격여부: true

[이순신] 성적정보를 출력합니다
이름: 이순신
국어: 100
영어: 60
수학: 60
총점: 220
평균: 73.33333333333333
합격여부: true

 

 

 

  • Score[ ] scores = new Score[3];
    // 배열객체 안에 length라는 속성이 있고 거기에는 3이 들어가있음
    // 배열객체 안에는 3칸짜리 배열이 있고, 그 배열 한칸에는 Score 객체가 들어가 있음. 이 객체의 기본값은 null
    // 이 배열객체의 주소값(0x1111)이 scores 참조변수에 대입 = scores 변수가 배열객체를 참조 

  • for (int index=0; index<scores.length; index++) {
      s.o.p("이름 입력");          String name = keyboard.getString();
      s.o.p("국어점수 입력");   int kor = keyboard.getInt();
      s.o.p("수학점수 입력");   int kor = keyboard.getInt();
      s.o.p("영어점수 입력");   int kor = keyboard.getInt();
    // 3번 반복할 일 (이름, 성적정보를 3번씩 입력받아서 3번씩 저장하고, 3번씩 출력)
    // for문이 실행되면, index가 0일 때, name, kor, eng, math 변수가 생기고 거기에 값들이 입력됨 

    •   Score score = new Score(); 
      // 입력된 성적정보를 저장할 Score객체 생성
      // Score객체 안에는 변수(name, kor, eng, math, total, average, isPassed)와 메소드(setScore, processScore, printScore)가 있음
      // Score객체의 주소값(0x2222)을  score변수에 저장 
      // 각자 다른 새로운 객체를 만들어야 하기 때문에 for문 안에 있어야 함

    •   score.setScore(name, kor, eng, math); 
      // score가 참조하고 있는 Score객체의 setScore() 메소드를 실행해서 메소드의 매개변수를 통해 값을 입력받고, 생성된 Score객체의 멤버변수에 그 값을 대입시킨다.
      // 이 setScore의 매개변수명은 이 클래스 내에서만 동일하면 됨

    •   scores[index] = score;

      // 배열에 Score객체를 저장하기
      // index=0이면, scores배열의 [0]번째 인덱스에 score값(0x2222 = Score객체의 주소값)이 대입
      // for문이 종료되면, 그 안에 쓰였던 변수 score, 객체 Score등이 모두 사라짐
      // for문이 또 돌아 -> 또다른 Score객체, index=1, name, kor, eng, math변수가 생기고 값들이 입력됨 
      // 이 객체의 주소값(0x3333)이 또다른 score변수에 저장되어 1번째 인덱스가 이 새로운 객체를 참조
      // 주소값끼리 참조했기 때문에, for문이 종료되면 안에 있는 score변수는 없어지고, 배열객체를 참조하는 scores변수만 남음
  • for(Score score : scores) {
      score.processScore();
      score.printScore();
    }
    // score != score (score변수는 for문 안에서 종료됐음)
    // scores변수에 있는 내용을 하나씩 뽑아서 새로운 변수 score에 저장
    // 먼저 scores 배열에 있는 첫번째 값(0x2222 주소값)을 score변수에 저장
    // 이 score변수가 가리키는 객체(0x2222주소값을 가지는 Score객체) 안에서의 processScore() 메소드를 실행
    // 다음 scores 배열의 두번째 값 (0x3333주소값)이 score변수에 저장
    // score가 가리키는 객체 (0x3333 주소값을 가지는 Score객체) 안에서의 processScore() 메소드 실행

 

* 값을 담는 객체는 값의 개수만큼 객체를 생성 !!! ( 객체 3개짜리 배열 -> 객체 3개 생성 ) 

 

 


 

  • 주문 상품정보를 입력받아서 출력하는 프로그램 만들어보기

    public class OrderItem {
               필드        상품명, 제조사, 가격, 구매수량, 구매가격
               메소드    - 구매상품정보(상품명, 제조사, 가격, 구매수량)을 전달받아서 필드에 대입하는 기능
                                 * 구매상품정보를 전달받아서 필드에 대입하는 수행문
                                 * 가격과 구매수량을 곱해서 구매가격을 계산하고 필드에 대입하는 수행문
                               - 구매상품정보를 출력하는 기능
                                  * 상품명, 제조사, 가격, 구매수량, 구매가격을 출력하는 수행문
    }
    public class OrderItemApp1 { 
              public static void main(String[] args) { 
                         // 키보드 입력을 읽어오는 KeyboardReader 객체 생성 
                         // 구매상품정보를 3개 저장하는 배열객체 생성
                         // 반복문
                           상품명, 제조사, 가격, 구매수량을 입력받아서 변수에 저장한다.
                           구매상품정보를 저장하는 객체를 생성한다.
                           구매상품정보객체의 구매상품정보 대입기능을 실행하는 메소드를 실행해서 객체에 값을 저장한다.
                           구매상품정보객체의 주소값을 배열에 순서대로 대입한다.
                          // 반복문 끝
                          // 총 구매상품가격을 저장하는 변수를 생성하고 0으로 초기화한다.
                          // 반복문 시작 - 향상된 for문 사용
                             구매상품정보객체의 상품정보 출력기능을 실행해서 구매상품정보를 화면에 출력한다.
                             구매상품정보객체의 구매가격을 총 구매상품가격변수에 누적시킨다.
                           // 반복문 끝
                           // 총 구매상품가격을 출력한다. 

 

  • OrderItem 클래스 생성
package day8;

public class OrderItem {

	// 필드 생성 
	String name; 	// 상품명
	String brand; 	// 제조사
	int price;	// 가격
	int amount;	// 구매수량
	int orderPrice;	// 구매가격
	
	
	// 메소드 생성
	
	/*
	 * 1. 구매상품정보를 전달받아서 필드에 대입하는 메소드
	 * 접근제어: public
	 * 반환타입: void
	 * 메소드명: setOrder
	 * 매개변수: String productName, String brand, int price, int amount
	 */
	public void setOrder(String productName, String makeBrand, int productPrice, int orderAmount) {
		name = productName;
		brand = makeBrand;
		price = productPrice; 
		amount = orderAmount;
		orderPrice = price*amount;
	}

	/*
	 * 2. 출력하는 메소드
	 * 접근제어: public
	 * 반환타입: void
	 * 메소드명: printOrder
	 * 매개변수: 없음
	 */
	public void printOrder() {
		System.out.println("<구매상품정보>");
		System.out.println("상품명: "+name);
		System.out.println("제조사: "+brand);
		System.out.println("가격: "+price);
		System.out.println("구매수량: "+amount);
		System.out.println("구매가격: "+orderPrice);
	}

}

 

 

  • OrderItemApp1 객체 생성
package day8;

import utils.KeyboardReader;

public class OrderItemApp1 {

	public static void main(String[] args) {
		
		KeyboardReader keyboard = new KeyboardReader(); // 키보드 입력 객체
		
		OrderItem[] order = new OrderItem[3]; //구매상품정보 3개를 저장하는 배열객체 
		
		for(int index=0; index<order.length; index++) {
			System.out.print("상품명: ");
			String name = keyboard.getString();
			System.out.print("제조사: ");
			String brand = keyboard.getString();
			System.out.print("가격: ");
			int price = keyboard.getInt();
			System.out.print("구매수량: ");
			int amount = keyboard.getInt();
			
			OrderItem orderItem = new OrderItem();	//객체 생성
			orderItem.setOrder(name, brand, price, amount);
			order[index] = orderItem;
			
			System.out.println("["+(index+1)+"] 번째 구매상품이 저장되었습니다. \n");
		}
		
		
		int totalOrderPrice = 0;
		for(OrderItem orderitem : order) { 
			orderitem.printOrder();
			totalOrderPrice += orderitem.orderPrice;	//orderitem이 가리키는 객체의 orderPrice를 누적합계
			System.out.println();
		}
		System.out.println("총 구매가격: "+totalOrderPrice);
	}
}
상품명: 아이폰
제조사: 애플
가격: 150
구매수량: 2
[1] 번째 구매상품이 저장되었습니다. 

상품명: 태블릿
제조사: 삼성
가격: 200
구매수량: 1
[2] 번째 구매상품이 저장되었습니다. 

상품명: 애플워치
제조사: 엘지
가격: 110
구매수량: 5
[3] 번째 구매상품이 저장되었습니다. 

<구매상품정보>
상품명: 아이폰
제조사: 애플
가격: 150
구매수량: 2
구매가격: 300

<구매상품정보>
상품명: 태블릿
제조사: 삼성
가격: 200
구매수량: 1
구매가격: 200

<구매상품정보>
상품명: 애플워치
제조사: 엘지
가격: 110
구매수량: 5
구매가격: 550

총 구매가격: 1050