오늘 방과후에서는 MVC모델과 ArrayList, 오버라이딩에 대해 배우게 되었습니다!!
배운 내용을 정리하면서 복습을 해보도록 하겠습니다.
MVC Model이란?
MVC는 소프트웨어 디자인 패턴 중 하나로, 프로젝트 내에서 클래스와 기능을 나누는 방법 중 하나입니다. 크게 세 가지 부분으로 나누어집니다.
1. Model (모델)
- 데이터 모델을 담당합니다.
- 데이터 객체를 정의하며, 이러한 데이터를 조작하고 관리하는 역할을 합니다.
- 일반적으로 데이터 객체를 표현하기 위한 Value Objects (VO) 클래스를 사용합니다.
- 예: StudentVO 클래스, StudentDAO 클래스 (데이터 액세스를 담당할 때 따로 사용)
2. View (뷰)
- 사용자 인터페이스(UI)를 담당합니다.
- 사용자에게 데이터를 표시하고 사용자 입력을 받는 역할을 합니다.
- 예: StudentView 클래스
3. Controller (컨트롤러)
- 모델과 뷰를 연결하고 중개하는 역할을 합니다.
- 사용자 입력을 받아 모델을 업데이트하고, 모델의 변경 사항을 뷰에 반영합니다.
- 예: StudentController 클래스
MVC 패턴은 소프트웨어를 모듈화하여 유지 보수와 개발을 용이하게 만들어주며, 각 부분이 독립적으로 변경될 수 있도록 해줍니다. 패키지 구성을 통해 각 부분을 분리하고 관리하면 더욱 효율적으로 작업할 수 있습니다.
StudentVO 만들기
Value Object (VO)는 값을 저장하고 전달하기 위한 객체입니다. 주로 데이터베이스에서 데이터를 검색하거나 결과를 반환할 때 사용됩니다. StudentVO 클래스는 다음과 같은 구조를 가지고 있으며, Setter와 Getter 메서드를 통해 필드에 접근합니다.
package info.vo;
//학생 정보를 저장하는 OBbject(Value Object)
//필드 : 값을 저장하기 위한
//Setter, Getter 메소드 : 필드 값을 설정 또는 반환하는 메소드
//생성자 : 전체 필드 값을 초기화
public class StudentVO {
private String name; // 성명
private int stuId; // 학번
private int grade; // 학년
private String major; // 전공
private String address; // 주소
private String mobile; // 전화
//생성자 추가 source -> using fields / 전체 값을 초기화 해줌
public StudentVO(String name, int stuId, int grade, String major, String address, String mobile) {
this.name = name;
this.stuId = stuId;
this.grade = grade;
this.major = major;
this.address = address;
this.mobile = mobile;
}
// Getter와 Setter 메서드는 필드에 접근하기 위한 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String toString() {
return "StudentVO [name=" + name + ", stuId=" + stuId + ", grade=" + grade + ", major=" + major + ", address="
+ address + ", mobile=" + mobile + "]";
}
//source -> toString : 개발자가 값을 확인하는 용도, 편리함
}
→ 유지보수를 위해 주석을 다는 것이 중요
Schoolnfo 인터페이스 만들기(package → interface)
인터페이스는 추상 메서드와 상수를 정의하는데 사용되며, 주로 다른 클래스에서 공통적으로 사용되는 상수 값을 정의하는 데 유용합니다. 아래 코드는 SchoolInfo 인터페이스를 정의한 것입니다.
package info.vo;
public interface SchoolInfo {
// final 상수 : 한 번 초기화된 값을 변경 불가능하며, 대문자로 변수명을 지정
// 상수들은 주로 인터페이스에 저장하여 공유
public static final String SCHOOL_NAME = "미림정보과학고등학교";
public static final String SCHOOL_ADDRESS = "서울특별시 관악구 대학동 호암로 546";
public static final String PHONE_NUMBER = "02-872-4071";
}
- SchoolInfo 인터페이스는 info.vo 패키지 내에서 정의됩니다.
- 이 인터페이스에는 상수만 정의되며, 이 상수들은 모두 대문자로 작성되어 변경할 수 없는 상수 값을 나타냅니다.
- 이러한 상수 값은 SchoolInfo 인터페이스를 구현하는 클래스에서 사용할 수 있으며, 이를 통해 공통된 학교 정보를 공유하고 재사용할 수 있습니다.
이렇게 정의된 SchoolInfo 인터페이스를 구현하는 클래스에서는 SCHOOL_NAME, SCHOOL_ADDRESS, PHONE_NUMBER 등의 상수를 활용하여 학교 정보를 사용할 수 있습니다.
Controller를 통한 StudentVO 객체 생성과 저장
svoArr[0]~[2]: 3명의 학생정보객체를 저장.
- svoArr[0] =svo1
- svoArr[1] = svo2
- svoArr[2] = svo3
1. 첫번째 방법, 객체 생성
아래 코드는 StudentVO 객체를 생성하고, 이를 StudentInfoController를 사용하여 저장하는 과정을 나타내고 있습니다.
// StudentVO 객체 생성 및 초기화
StudentVO svo1 = new StudentVO("김미림", 1101, 1, "뉴미디어소프트웨어과", "010-1234-5678", "서울시 관악구 호암로");
StudentVO svo2 = new StudentVO("이미림", 1102, 1, "뉴미디어웹솔루션과", "010-2222-3333", "서울시 동장구");
StudentVO svo3 = new StudentVO("박미림", 1103, 1, "뉴미디어디자인과", "010-1234-7777", "서울시 관악구 호암로");
// StudentInfoController 객체 생성
StudentInfoController controller = new StudentInfoController();
// 생성한 StudentVO 객체를 Controller를 통해 저장
controller.insert(svo1);
controller.insert(svo2);
controller.insert(svo3);
- 위 코드에서 StudentVO 클래스의 객체 svo1, svo2, svo3를 생성하고 초기화합니다.
- 이후, StudentInfoController 클래스의 객체 controller를 생성합니다.
- controller.insert(svo1), controller.insert(svo2), controller.insert(svo3)를 통해 StudentVO 객체를 StudentInfoController에 저장합니다.
이렇게 하면 StudentInfoController 클래스에서 정의한 insert 메서드를 통해 학생 정보를 저장하고 관리할 수 있게 됩니다.
2. 두번째 방법, 배열
package info.controller;
import info.vo.StudentVO;
// svoArr[0] ~ [2] : 3명의 학생정보 객체를 저장한다.
public class StudentInfoController {
StudentVO[] svoArr = new StudentVO[3];
int i;
public void insert(StudentVO svo) {
svoArr[i++] = svo;
}
public void view() {
for(StudentVO svo : svoArr) { // for(int i = 0; i < svoArr.length; i++)
System.out.println(svo);
}
}
public static void main(String[] args) {
String names[] = {"오미림", "장원영", "이유진"};
int stuIds[] = {1101,1102,1103};
int grade[] = {1,1,1,1};
String majors[] = {"웹솔루션", "소프트웨어", "디자인"};
String mobile[] = {"010-1111-2222", "010-2222-1234", "1234"};
String address[] = {"서울시 관악구 호암로 21길", "서울시 동작구 장승배기로 35길", "서울시 서초구 반포로 31길"};
StudentInfoController controller = new StudentInfoController();
for(int i = 0; i < names.length; i++) {
StudentVO svo = new StudentVO(names[i], stuIds[i], grade[i], majors[i], mobile[i], address[i]);
controller.insert(svo);
System.out.println();
}
controller.view();;
}
}
결과
여기서 잠깐!!
아까 StudentVO를 만들 때 toString() 메소드를 만들어 주었는데요.
toString() 메서드는 Object 클래스에 정의된 toString() 메서드는 객체의 클래스 이름과 해시 코드를 반환하도록 구현되어 있어서 기본적으로 객체의 주소값을 반환합니다.
개발자가 직접 클래스 내에서 toString() 메서드를 오버라이딩하여 객체의 내용을 원하는 형식으로 문자열로 반환하도록 재정의할 수 있습니다.
따라서 만약 toString()호출 안했다면
이런식으로 주소값이 나오게 됩니다!!
주소값 대신 원하는 정보 반환을 하기 위해서는 toString() 메서드를 오버라이딩하면 주소값 대신 객체의 내용을 문자열로 반환할 수 있습니다.이를 통해 디버깅이나 객체 정보 출력 등에 유용하게 활용할 수 있습니다.
오버라이딩을 했다면
이렇게 결과가 잘 나오게 됩니다!!
Array와 ArrayList 차이점
Array (배열)
- 길이가 고정되어 있습니다. 배열을 생성할 때 크기를 지정하고, 이 크기는 변경할 수 없습니다.
- 배열을 초기화할 때 크기를 정확하게 지정해야 합니다.
- 예: StudentVO[] svoArr = new StudentVO[3]; (길이 3인 배열 생성)
- 길이를 초과하여 데이터를 저장하려면 새 배열을 생성하고 데이터를 복사해야 합니다.
ArrayList (Java Collection):
- 길이가 유동적으로 조절 가능합니다. 동적으로 요소를 추가하거나 삭제할 수 있습니다.
- 크기를 지정하지 않고 생성할 수 있으며, 요소가 추가될 때마다 크기가 자동으로 조절됩니다.
- Generic Type을 지정하여 해당 타입의 요소만 저장할 수 있습니다.
예: ArrayList<StudentVO> svoList = new ArrayList<StudentVO>(); - 예: svoList.add(svo);, svoList.remove(index);
- 크기를 얻을 때는 size() 메서드를 사용합니다.
package info.controller;
import info.vo.StudentVO;
import java.util.ArrayList;
// svoArr[0] ~ [2] : 3명의 학생정보 객체를 저장한다.
public class StudentInfoController {
private int StudentVO;
ArrayList<StudentVO> svoList = new ArrayList<>(StudentVO);
int i;
public void insert(StudentVO svo){
svoList.add(svo);
}
public void view() {
for(StudentVO svo : svoList) { // for(int i = 0; i < svoArr.length; i++)
System.out.println("성명 : " + svo.getName() + "\t");
System.out.println("학번 : " + svo.getStuId() + "\t");
System.out.println("학년 : " + svo.getGrade() + "\t");
System.out.println("전공 : " + svo.getMajor() + "\t");
}
}
public static void main(String[] args) {
String names[] = {"오미림", "장원영", "이유진"};
int stuIds[] = {1101,1102,1103};
int grade[] = {1,1,1,1};
String majors[] = {"웹솔루션", "소프트웨어", "디자인"};
String mobile[] = {"010-1111-2222", "010-2222-1234", "1234"};
String address[] = {"서울시 관악구 호암로 21길", "서울시 동작구 장승배기로 35길", "서울시 서초구 반포로 31길"};
StudentInfoController controller = new StudentInfoController();
for(int i = 0; i < names.length; i++) {
StudentVO svo = new StudentVO(names[i], stuIds[i], grade[i], majors[i], mobile[i], address[i]);
controller.insert(svo);
System.out.println();
}
controller.view();;
}
}
결과
3. ArrayList + Scanner로 입력받기
package info.controller;
import java.util.ArrayList;
import java.util.Scanner;
import info.vo.SchoolInfo;
import info.vo.StudentVO;
public class StudentInfoController {
public static final int CONTINUE = 1; // 계속 입력
public static final int EXIT = 0; // 그만 입력
ArrayList<StudentVO> svoList = new ArrayList<StudentVO>();
public void insert(StudentVO svo) {
svoList.add(svo);
}
public void view() {
System.out.println("학교 명 : " + SchoolInfo.SCHOOL_NAME);
for (StudentVO svo : svoList) {
System.out.print("성명 : " + svo.getName() + "\t");
System.out.print("학번 : " + svo.getStuId() + "\t");
System.out.print("학년 : " + svo.getGrade() + "\t");
System.out.print("전공 : " + svo.getMajor() + "\n");
}
System.out.println("학교 전화 : " + SchoolInfo.PHONE_NUMBER);
System.out.println("학교 주소 : " + SchoolInfo.SCHOOL_ADDRESS);
}
public static void main(String args[]) {
ArrayList<String> names = new ArrayList<String>();
ArrayList<Integer> grades = new ArrayList<Integer>();
ArrayList<Integer> stuIds = new ArrayList<Integer>();
ArrayList<String> majors = new ArrayList<String>();
ArrayList<String> mobiles = new ArrayList<String>();
ArrayList<String> addresses = new ArrayList<String>();
Scanner s1 = new Scanner(System.in);
Scanner s2 = new Scanner(System.in);
int flag = CONTINUE;
System.out.println("======== 학생 정보 입력 화면 ========");
while (true) {
if (flag == CONTINUE) {
System.out.print("== 성명 : ");
names.add(s1.nextLine());
System.out.print("== 학번 : ");
stuIds.add(s2.nextInt());
System.out.print("== 학년 : ");
grades.add(s2.nextInt());
System.out.print("== 전공 : ");
majors.add(s1.nextLine());
System.out.print("== 전화 : ");
mobiles.add(s1.nextLine());
System.out.print("== 주소 : ");
addresses.add(s1.nextLine());
} else if (flag == EXIT) {
break;
}
System.out.print("계속 입력하시겠습니까? (계속 : 1, 종료 : 0) : ");
flag = s2.nextInt();
System.out.println("");
}
StudentInfoController controller = new StudentInfoController();
for (int i = 0; i < names.size(); i++) {
StudentVO svo = new StudentVO(names.get(i), stuIds.get(i), grades.get(i), majors.get(i), mobiles.get(i), addresses.get(i));
controller.insert(svo);
System.out.println();
}
controller.view();
s1.close();
s2.close();
}
}
- StudentInfoController 클래스는 학생 정보를 입력하고 출력하는 데 사용됩니다.
- 학생 정보는 StudentVO 객체를 사용하여 저장하고, 이 객체들은 ArrayList인 svoList에 저장됩니다.
- main 메서드에서는 사용자로부터 학생 정보를 입력받아 StudentVO 객체를 생성하고, 컨트롤러의 insert 메서드를 사용하여 정보를 저장합니다.
- 마지막으로 view 메서드를 호출하여 입력된 학생 정보를 출력합니다.
StudentDAO 만들기
package info.vo;
import java.util.ArrayList;
//ArrayList : 여러명의 학생 정보를 저장하기 위해 필요
public class StudentDAO {
ArrayList<StudentVO> svoList = new ArrayList<StudentVO>();
//insert() : 학생 정보 객체 참조값을 ArrayList에 추가
public void insert(StudentVO svo) {
svoList.add(svo);
}
//select() : 학생 정보들이 저장된 ArrayList객체 참조값을 반환
public ArrayList<StudentVO> select(){
return svoList;
}
}
StudentView 만들기
마지막으로 이제 controller에 있는 부분을 따로 분리하도록 하겠습니다!!
package info.view;
import java.util.ArrayList;
//학생 정보를 출력하는 Object
import info.vo.SchoolInfo;
import info.vo.StudentVO;
public class StudentView {
public void view(ArrayList<StudentVO> svoList) { // svoList 넣어주기
System.out.println("학교 명 : " + SchoolInfo.SCHOOL_NAME);
// 개선된 (enhanced) for문
for (StudentVO svo : svoList) {
System.out.print("성명 : " + svo.getName() + "\t"); // svo = svo.toString()
System.out.print("학번 : " + svo.getStuId() + "\t");
System.out.print("학년 : " + svo.getGrade() + "\t");
System.out.print("전공 : " + svo.getMajor() + "\t");
System.out.print("번호 : " + svo.getMobile() + "\t");
System.out.print("주소 : " + svo.getAddress() + "\n");
}
// for(int i = 0; i < svoArr.length; i++) { System.out.println(svoArr[i]); }
System.out.println("학교 전화 : " + SchoolInfo.PHONE_NUMBER);
System.out.println("학교 주소 : " + SchoolInfo.SCHOOL_ADDRESS);
}
}
Controller에 view 메소드를 빼주었습니다!
package info.controller;
import java.util.ArrayList;
import java.util.Scanner;
import info.view.StudentView;
import info.vo.SchoolInfo;
import info.vo.StudentDAO;
// svoArr[0]~[2]: 3명의 학생정보객체를 저장한다.
import info.vo.StudentVO;
public class StudentInfoController {
public static final int CONTINUE = 1; // 계속 입력
public static final int EXIT = 0; // 그만 입력
public static void main(String args[]) { //ArrayList로 변수 만들기
ArrayList<String> names = new ArrayList<String>();
ArrayList<Integer> grades = new ArrayList<Integer>();
ArrayList<Integer> stuIds = new ArrayList<Integer>();
ArrayList<String> majors = new ArrayList<String>();
ArrayList<String> mobiles = new ArrayList<String>();
ArrayList<String> addresses = new ArrayList<String>();
Scanner s1 = new Scanner(System.in); //문자열 입력용
Scanner s2 = new Scanner(System.in); //정수값 입력용
int flag = CONTINUE; //flag에 상수 CONTINUE(1) 값 대입
System.out.println("======== 학생 정보 입력 화면 ========");
while (true) {
if (flag == CONTINUE) { //flag가 1이면 계속
System.out.print("== 성명 : "); //ArrayList를 사용할 때는 add사용
names.add(s1.nextLine());
System.out.print("== 학번 : ");
stuIds.add(s2.nextInt());
System.out.print("== 학년 : ");
grades.add(s2.nextInt());
System.out.print("== 전공 : ");
majors.add(s1.nextLine());
System.out.print("== 전화 : ");
mobiles.add(s1.nextLine());
System.out.print("== 주소 : ");
addresses.add(s1.nextLine());
} else if (flag == EXIT) { //flag가 0이면 종료
break;
}
System.out.print("계속 입력하시겠습니까? (계속 : 1, 종료 : 0) : ");
flag = s2.nextInt(); //flag 입력받기
System.out.println("");
} //입력받기
StudentDAO dao = new StudentDAO();
// 길이 : length -> size()
for (int i = 0; i < names.size(); i++) { //이름의 길이까지
StudentVO svo = new StudentVO(names.get(i), stuIds.get(i), grades.get(i), majors.get(i), mobiles.get(i), addresses.get(i));
System.out.println();
dao.insert(svo); // ->콜바이 래퍼런스 ctrl + 클릭
}
// 화면 출력
StudentView stuView = new StudentView();
stuView.view(dao.select());
s1.close(); // 스캐너 닫아주기 -> 시스템 리소스를 덜 쓰게 됨
s2.close();
}
}
결과
1. 학생 정보 입력
2. 학교와 학생 정보
총 코드 모음
1. vo
→ StudentVO
package info.vo;
//학생 정보를 저장하는 OBbject(Value Object)
//필드 : 값을 저장하기 위한
//Setter, Getter 메소드 : 필드 값을 설정 또는 반환하는 메소드
//생성자 : 전체 필드 값을 초기화
//
public class StudentVO { //private접근자 현재 이 필드에서만 사용할 수 있음
private String name; //성명
private int stuId; //학번
private int grade; //학년
private String major; //전공
private String address; //주소
private String mobile; //전화
//생성자 추가 source -> using fields / 전체 값을 초기화 해줌
public StudentVO(String name, int stuId, int grade, String major, String address, String mobile) {
this.name = name;
this.stuId = stuId;
this.grade = grade;
this.major = major;
this.address = address;
this.mobile = mobile;
}
//값을 반환받는 GETTER 값을 입력받는 것은 Setter
//source -> getter setter 만들기
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String toString() {
return "StudentVO [name=" + name + ", stuId=" + stuId + ", grade=" + grade + ", major=" + major + ", address="
+ address + ", mobile=" + mobile + "]";
}
//source -> toString : 개발자가 값을 확인하는 용도, 편리함
}
→ StudentDAO
package info.vo;
import java.util.ArrayList;
//ArrayList : 여러명의 학생 정보를 저장하기 위해 필요
public class StudentDAO {
ArrayList<StudentVO> svoList = new ArrayList<StudentVO>();
//insert() : 학생 정보 객체 참조값을 ArrayList에 추가
public void insert(StudentVO svo) {
svoList.add(svo);
}
//select() : 학생 정보들이 저장된 ArrayList객체 참조값을 반환
public ArrayList<StudentVO> select(){
return svoList;
}
}
→ SchoolInfo
package info.vo;
public interface SchoolInfo {
// final 상수 : 한 번 초기화된 값을 변경 불가능하며, 대문자로 변수명을 지정
// 상수들은 주로 인터페이스에 저장하여 공유
public static final String SCHOOL_NAME = "미림정보과학고등학교";
public static final String SCHOOL_ADDRESS = "서울특별시 관악구 대학동 호암로 546";
public static final String PHONE_NUMBER = "02-872-4071";
}
2. View
→StudentView
package info.view;
import java.util.ArrayList;
//학생 정보를 출력하는 Object
import info.vo.SchoolInfo;
import info.vo.StudentVO;
public class StudentView {
public void view(ArrayList<StudentVO> svoList) { // svoList 넣어주기
System.out.println("학교 명 : " + SchoolInfo.SCHOOL_NAME);
// 개선된 (enhanced) for문
for (StudentVO svo : svoList) {
System.out.print("성명 : " + svo.getName() + "\t"); // svo = svo.toString()
System.out.print("학번 : " + svo.getStuId() + "\t");
System.out.print("학년 : " + svo.getGrade() + "\t");
System.out.print("전공 : " + svo.getMajor() + "\t");
System.out.print("주소 : " + svo.getAddress() + "\n");
}
// for(int i = 0; i < svoArr.length; i++) { System.out.println(svoArr[i]); }
System.out.println("학교 전화 : " + SchoolInfo.PHONE_NUMBER);
System.out.println("학교 주소 : " + SchoolInfo.SCHOOL_ADDRESS);
}
}
3. controller
→StudentInfoController
package info.controller;
import java.util.ArrayList;
import java.util.Scanner;
import info.view.StudentView;
import info.vo.SchoolInfo;
import info.vo.StudentDAO;
// svoArr[0]~[2]: 3명의 학생정보객체를 저장한다.
import info.vo.StudentVO;
public class StudentInfoController {
public static final int CONTINUE = 1; // 계속 입력
public static final int EXIT = 0; // 그만 입력
public static void main(String args[]) { //ArrayList로 변수 만들기
ArrayList<String> names = new ArrayList<String>();
ArrayList<Integer> grades = new ArrayList<Integer>();
ArrayList<Integer> stuIds = new ArrayList<Integer>();
ArrayList<String> majors = new ArrayList<String>();
ArrayList<String> mobiles = new ArrayList<String>();
ArrayList<String> addresses = new ArrayList<String>();
Scanner s1 = new Scanner(System.in); //문자열 입력용
Scanner s2 = new Scanner(System.in); //정수값 입력용
int flag = CONTINUE; //flag에 상수 CONTINUE(1) 값 대입
System.out.println("======== 학생 정보 입력 화면 ========");
while (true) {
if (flag == CONTINUE) { //flag가 1이면 계속
System.out.print("== 성명 : "); //ArrayList를 사용할 때는 add사용
names.add(s1.nextLine());
System.out.print("== 학번 : ");
stuIds.add(s2.nextInt());
System.out.print("== 학년 : ");
grades.add(s2.nextInt());
System.out.print("== 전공 : ");
majors.add(s1.nextLine());
System.out.print("== 전화 : ");
mobiles.add(s1.nextLine());
System.out.print("== 주소 : ");
addresses.add(s1.nextLine());
} else if (flag == EXIT) { //flag가 0이면 종료
break;
}
System.out.print("계속 입력하시겠습니까? (계속 : 1, 종료 : 0) : ");
flag = s2.nextInt(); //flag 입력받기
System.out.println("");
} //입력받기
StudentDAO dao = new StudentDAO();
// 길이 : length -> size()
for (int i = 0; i < names.size(); i++) { //이름의 길이까지
StudentVO svo = new StudentVO(names.get(i), stuIds.get(i), grades.get(i), majors.get(i), mobiles.get(i), addresses.get(i));
System.out.println();
dao.insert(svo); // ->콜바이 래퍼런스 ctrl + 클릭
}
// 화면 출력
StudentView stuView = new StudentView();
stuView.view(dao.select());
s1.close(); // 스캐너 닫아주기 -> 시스템 리소스를 덜 쓰게 됨
s2.close();
}
}
디렉토리 구조
'AfterSchool > 자바 방과후' 카테고리의 다른 글
Vending machine GUI로 만들기(1231) (2) | 2023.01.03 |
---|---|
깃허브 쓰는법, Vending Machine 로직소스 만들기(1230) (0) | 2022.12.30 |
성적프로그램과 BMI프로그램 만들기(1229) (0) | 2022.12.29 |
Event Programming EventListener 4가지 방법과 도서 정보 관리 시스템(1228) (0) | 2022.12.28 |
상속 예제와 JFrame 사진 넣고 버튼 누르면 이미지 변환(1227) (0) | 2022.12.27 |