고래씌

[JAVA] 8. 객체 배열 & 실습문제 본문

JAVA/JAVA 기초

[JAVA] 8. 객체 배열 & 실습문제

고래씌 2023. 10. 13. 12:20

1. 객체 배열

=> 객체 배열을 생성할 때 Heap 메모리 안에 무조건 들어간다!

 

Alt + Shift + s 단축키  => Generate Getters and Setters

package com.kh.chap01_oneVsMany.mdoel.vo;

public class Book {
	private String title;
	private String author;
	private int price;
	private String publisher;
	
	public String getTitle() {
		return title;
	}
	
	public void setTitle(String title) {
		this.title = title;
	}
	
	public String getAuthor() {
		return author;
	}
	
	public void setAuthor(String author) {
		this.author = author;
	}
	
	public int getPrice() {
		return price;
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
	
	public String getPublisher() {
		return publisher;
	}
	
	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}
	
	public Book(String title, String author, int price, String publisher) {
		this.title = title;
		this.author = author;
		this.price = price;
		this.publisher = publisher;
	}
	
	public Book() {
		
	}
	
	public String information() {
		return title+ ", " + author + ", " + price + ", " + publisher;
	}
	
	
}
package com.kh.chap01_oneVsMany.run;

import java.util.Scanner;

import com.kh.chap01_oneVsMany.mdoel.vo.Book;

public class Run {

	public static void main(String[] args) {

		// 1. 기본생성자를 호출하여 객체 생성후 setter메소드를 통해 각 필드에 값을 대입
		Book bk1 = new Book();
		bk1.setTitle("Do it 자바프로그래밍");
		bk1.setAuthor("라이언");
		bk1.setPrice(25000);
		bk1.setPublisher("이지스 퍼블리싱");
		
		System.out.println(bk1.information());
		
		// 2. 매개변수 생성자로 객체 생성과 동시에 필드에 값을 대입
		Book bk2 = new Book("자바프로그래밍 입문", "전예홍", 25000, "이지스 퍼블리싱");
		
		
		// 3. 3개의 Book 객체가 필요하다는 가정하에 각각의 book 객체를 별도로 관리.
		// 단, 각 Book 객체는 사용자에게 입력받은 값들로 채워넣을 예정
		
		Scanner sc = new Scanner(System.in);
		Book bk4 = null;
		
		Book bk5 = null;
		Book bk6 = null;
		for(int i=0; i<3; i++) {   // 이렇게 하면 book객체 1개 밖에 관리를 못함.
			System.out.print("제목 : ");
			String title = sc.nextLine();
			
			System.out.print("저자 : ");
			String author = sc.nextLine();
			
			System.out.print("가격 : ");
			int price = sc.nextInt();
			
			sc.nextLine();
			
			System.out.print("출판사 : ");
			String publisher = sc.nextLine();
			
			if(i == 0) {
				bk4 = new Book(title, author, price, publisher);
			}else if(i == 1) {
				bk5 = new Book(title, author, price, publisher);
			}else {
				bk6 = new Book(title, author, price, publisher);
			} // => 이런 코드는 유지보수가 어려움. 데이터가 많을 수록 관리가 어려움
			// 반복문 동시에 변수를 설정하면 반복문 끝남과 동시에 사라짐
		}
	}

}

☞ 안에 for문은 대량의 데이터를 저장하고 관리할 때 유지보수가 어렵다! 그래서 객체 배열을 이용

 

☞  그러므로 아래와 같이 객체 배열을 사용해주어야 한다!

- Book 객체 배열은 참조형임!

- 그래서 값이 안들어간 arr[0] 은 null 값이 들어가 있음

 

package com.kh.chap01_oneVsMany.run;

import java.util.Scanner;

import com.kh.chap01_oneVsMany.mdoel.vo.Book;

public class ObjectArrayRun {

	public static void main(String[] args) {
		
		// 객체 배열 생성
		Book [] arr = new Book[3];
		// arr[0] == null 값이 들어감.
		
		Scanner sc = new Scanner(System.in);
		
		for(int i =0; i< arr.length; i++) {
			System.out.print("제목 : ");
			String title = sc.nextLine();
			
			System.out.print("저자 : ");
			String author = sc.nextLine();
			
			System.out.print("가격 : ");
			int price = sc.nextInt();
			
			sc.nextLine();
			
			System.out.print("출판사 : ");
			String publisher = sc.nextLine();
			
			arr[i] = new Book(title,author, price, publisher);
		}
		
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i].information());
		}
		
		// 사용자에게 검색할 도서 제목을 입력받아 전체 도서들의 제목과 일일이 비교하여
		// 일치하는 도서의 가격을 알려주는 메소드
		
		System.out.println("검색할 책 제목: ");
		String searchTitle = sc.nextLine();
		
		int count = 0;
		
		// 만약 일치하는 도서를 찾지 못한 경우 "검색된 도서가 없습니다" 출력
		for(int i=0; i<arr.length; i++) {
			if(arr[i].getTitle().equals(searchTitle)) {
				count++;
				System.out.println(arr[i].getPrice());
				break;
			}
		}
		if(count == 0) System.out.println("검색된 도서가 없습니다.");
	}
}

 

2. 객체배열 실습문제

package com.kh.practice.student.model.vo;

public class Student {
	
	private String name;
	private String subject;
	private int score;
	
	public Student() {
		
	}
	
	public Student(String name, String subject, int score) {
		this.name = name;
		this.subject = subject;
		this.score = score;
	}
	
	public String inform() {
		return "이름 : "+name + " / " + "과목 : " +subject + " / " + "점수 : " +score + " ";
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setSubject(String subject) {
		this.subject = subject;
	}
	
	public void setScore(int score) {
		this.score = score;
	}
	
	public String getName() {
		return name;
	}
	
	public String getSubject() {
		return subject;
	}
	
	public int getScore() {
		return score;
	}
	
}
package com.kh.practice.student.controller;

import com.kh.practice.student.model.vo.Student;

public class StudentController {
	
	private Student [] sArr = new Student[5];
	public static final int CUT_LINE = 60;

	
	public StudentController() {
		sArr[0] = new Student("김길동","자바",100);
		sArr[1] = new Student("박길동","디비",50);
		sArr[2] = new Student("이길동","화면",85);
		sArr[3] = new Student("정길동","서버",60);
		sArr[4] = new Student("홍길동","자바",20);
		
	
//		Student s1 = new Student("김길동","자바",100);
//		Student s2 = new Student("박길동","디비",50);
//		Student s3 = new Student("이길동","화면",85);
//		Student s4 = new Student("정길동","서버",60);
//		Student s5 = new Student("홍길동","자바",20);
	}
	
	public Student[] printStudent() {
		return sArr;
	}
	
	public int sumScore() {
		int sum = 0;
		for(int i=0; i<sArr.length; i++) {
			sum+= sArr[i].getScore();
		}
		return sum;
	}

	public double[] avgScore() {
		double [] davg = new double[2];
		davg[0] = sumScore();
		davg[1] = davg[0] / 5;
		
		return davg;
	}
	
}
package com.kh.practice.student.view;

import com.kh.practice.student.controller.StudentController;
import com.kh.practice.student.model.vo.Student;

public class StudentMenu {
	
	private StudentController ssm = new StudentController();
	private Student s = new Student();
	
	public StudentMenu() {
		System.out.println("========== 학생 정보 출력 ==========");
		
		Student [] stdArr = ssm.printStudent();
		
		
		for(int i=0; i<stdArr.length; i++) {
			System.out.println(stdArr[i].inform());
		}
		
		System.out.println("========== 학생 성적 출력 ==========");
		System.out.println("학생 점수 합계 : "+ (int) ssm.avgScore()[0]); // 강제형변환
		System.out.println("학생 점수 평균 : "+ ssm.avgScore()[1]);
		
		System.out.println("========== 성적 결과 출력 ==========");
		for(int i=0; i<stdArr.length; i++) {
			System.out.printf("%s학생은 %s대상입니다.\n", stdArr[i].getName(), 
					stdArr[i].getScore() < ssm.CUT_LINE ? "재시험" : "통과 ");
		}
	}
}
package com.kh.practice.student.run;

import com.kh.practice.student.model.vo.Student;
import com.kh.practice.student.view.StudentMenu;

public class Run {

	public static void main(String[] args) {
    
		StudentMenu sm = new StudentMenu();

	}

}

'JAVA > JAVA 기초' 카테고리의 다른 글

[JAVA] 사원 프로그램 객체 실습  (0) 2023.10.13
[JAVA] 9. 상속 & 오버라이딩  (0) 2023.10.13
[JAVA] 7-4. 오버로딩 & 클래스 실습문제  (0) 2023.10.13
[JAVA] 7-3. 메소드(Method)  (0) 2023.10.12
[JAVA] 7-2. 생성자  (0) 2023.10.12