[Java #9 / 250313-0314] object array

temi·2025년 3월 15일

Java

목록 보기
9/15

학원에서 학습한 내용을 개인정리한 글입니다.


수업

MVC 패턴 (Model, View, Controller)

  • 클래스 단일 책임 원칙
  • 햄버거 가게로 예시를 들자면,
  • Model (모델) → 요리사
    • 햄버거(데이터)를 만들고 관리
    • 데이터를 저장하는 곳
  • View (뷰) → 점원
    • 손님한테 햄버거를 예쁘게 세팅해서 보여줌
  • Controller (컨트롤러) → 주문받는 사람
    • 손님이 원하는 햄버거를 요리사한테 전달
    • 중간에서 조율
  • 로 생각하면 된다. 각자 존재하는 이유가 있다.

다이어그램

이런식으로 정리해보다가 너무 알아보기 힘들어져서 강사님께 질문을 했더니 다이어그램을 그리는 법을 알려주셨다!

  • 규칙
    • 위: 멤버변수
    • 중간: 생성자
    • 아래: 메소드
    • 순서 순으로 제작해야함

아직 화살표 방향이나 모양은 어떻게 하는지 몰라서 학생관리프로그램을 만들고나서 한번 수정해봐야겠다.

StackOverFlow

  • 프로그램 실행 중 스택 메모리가 꽉 차서 에러가 발생하는 현상
  • 이번에 발생한 것은 두 개 이상의 객체나 함수가 서로 끝없이 호출하면서 생긴 문제였다.
    • 계속 호출되기 때문에 메모리가 꽉차서 발생
    • 그래서 양방향으로 부르지않고, 싱글톤 방식을 사용하여 해결

싱글톤 패턴 Singleton

  • 실제로 생성되는 객체는 하나이고, 최초 생성 이후. 호출된 생성자는 최초 생성자를 리턴
  • 구현방법에는 여러개가 있음

private static StudentController controller;
	//생성자의 접근제한자를  Private로 
	private StudentController() {
		
	}
	
	public static StudentController getStudentController() {
		if (controller == null) {
			controller = new StudentController();
		}
		return controller;
	}
	public static void main(String[] args) {
		StudentController.getStudentController().menu();
	}
import static com.student.controller.StudentController.getStudentController;

	public void mainMenu() {
		while(true) {
			printMenuTitleContent("학생관리 프로그램 v0.1");
			printMenuContent(1, "학생 등록");
			printMenuContent(2, "학생 수정(학년,반,전화번호,주소)");
			printMenuContent(3, "학생 삭제");
			printMenuContent(4, "전체 조회");
			printMenuContent(5, "학생 번호로 조회");
			printMenuContent(6, "학년으로 조회");
			printMenuContent(7, "이름으로 조회(동일한 이름)");
			printMenuContent(0, "프로그램 종료 ");

			printInputText("번호");
			int choice = sc.nextInt();
			
			switch(choice) {
				case 1: 
					getStudentController().insertStudent();
					break;
				case 2: 
					getStudentController().updateStudent();
					break;
				case 3: 
					System.out.println("개발 중..."); 
					break;
				case 4:
					getStudentController().searchStudent(); 
					break;
				case 5: 
					getStudentController().searchStudentByNo();
					break;
				case 6: 
					getStudentController().searchStudentByGrade(); 
					break;
				case 7: 
					getStudentController().searchStudentByName();
					break;
				case 0: 
					System.out.println("프로그램 종료합니다"); 
					return;
				default: 
					System.out.println("잘못된 선택입니다."); 
					break;
			}
		}
	}

객체 배열

선언

		//객체배열 선언
		Food[] foods;
		foods = new Food[3]; //Food f1, f2, f3
		
		//foods[0].setName("구내식당"); Null뜸
		foods[0] = new Food();
		//foods[0]은 주소값 뜨고, [1]은 null
		System.out.println(foods[0]);
		System.out.println(foods[1]);

실습

반복문을 이용해서 입력 저장 출력


for(int i = 0; i < foods.length; i++) {
			if (foods[i] == null) {
				foods[i] = new Food();
			}
			System.out.print("[" + i + "] 음식 이름을 입력하세요: ");
			foods[i].setName(sc.next());
			System.out.print("[" + i + "] 음식 가격을 입력하세요: ");
			foods[i].setPrice(sc.nextInt());
			System.out.print("[" + i + "] 음식 타입(e.g.한식, 일식...)를 입력하세요: ");
			foods[i].setType(sc.next());
		}
		
		String format = "[%d] %s, %d, %s\n";
		for(int i = 0; i < foods.length; i++) {
			System.out.printf(format, i, foods[i].getName(), foods[i].getPrice(), foods[i].getType());
		}
}

이클립스 프로젝트 파일 안열릴 때

이번 실습시간에 시간을 많이 쓸 수 밖에 없었던 이유..
이클립스가 버벅거리면서 저장을 할 때 나갔다 들어오면 그 이후 제목을 수정했던(원래 제목을 수정하면 안되지만ㅠㅠ) 프로젝트가 열리지 않는 문제가 있었다.

그런 경우에 경로를 타고 들어가서, .Project 파일을 클릭하고, 이름이나 다른 데이터가 이상하지 않은지 확인하고 수정하고 이클립스에서 다시 프로젝트를 열어보면 잘 열린다!


미리 준비

  • 주말동안 실습들 하기..

느낀점

  • 수업 들으면서 잘 정리해서 적으면 블로그에 올릴 때 문제없을 거라고 생각했는데 실습 위주로 흘러가기 시작하니까 어떻게 올릴지 고민을 해봐야할 것 같다 ㅠㅠ
  • 지금 작업하고 있는 실습과제를 따로 정리를 잘 해서 옮겨보고싶은데 괜찮으려나….

profile
250304~

0개의 댓글