- 0925 11일차2023년 09월 25일 14시 25분 12초에 업로드 된 글입니다.작성자: 삶은고구마
실습과제 1,2,3 피드백
패키지 vo (Value of)
class 내부 필드의 상태(변수들)은 private를 전제로 함.
setter:값을 설정하는 목적의 메소드이기때문에 매개변수만 있음 (void)
getter:값을 내보내는 목적의 메소드라 return값만있음 (타입형 리턴)
static멤버 non-static멤버 from 클래스에 속함 객체에 속함 초기화 시점 클래스가 로딩될 때 초기화,
프로그램 종료까지 메모리에 유지객체가 생성될 때 초기화,
객체가 삭제될때까지 메모리에 유지생성 타이밍 클래스를 로딩할 때 생성.
클래스의 인스턴스를 사용하지 않고도 사용가능.클래스의 인스턴스를 생성해야 사용 value 클래스마다 공유되는 값 객체마다 다른 값 용도 유틸리티 메서드 등을 표현.
상수값을 저장하는데 사용객체의 상태를 표현,
객체간의 관계를 나타내는데 사용ex) DB연결정보, 프로그램에서 공유할
상수값학생 객체 생성시,
학생의 이름,학번,성적 등의 정보다시보고 개념정리
https://peonyf.tistory.com/entry/JAVA-Static%EA%B3%BC-NonStatic
[JAVA] Static과 NonStatic
Static 멤버와 Non-Static 멤버의 차이 staitc 멤버 non-static 멤버 From 클래스에 속하는 멤버 객체에 속하는 멤버 초기화 시점 클래스가 로딩될 때 초기화되며, 프로그램 종료까지 메모리에 유지 객체가
peonyf.tistory.com
class method - class변수 접근 가능 / 객체변수인 member변수 접근 불가능
왜냐하면 객체변수는 객체를 생성해야 만들어지는 변수인데
생성시기는 class 가 먼저이기때문에 객체가 만들어지지 않는 다면 객체변수 접근 불가능.
반대로
member method에서는 둘다 접근 가능. 생성시기가 class보다 이후이기 때문에.(따로 객체를 생성해야 하기때문)
1.객체 배열
-배열변수 선언
-배열객체 할당
-번지수별로 객체할당
Person 객체 배열 데이터를 담는 용도의 클래스
VO:value object
DO:domain object
DTO:data transfer object
BEAN
Entity(db관점)
0925 student 관리 예제
-studentMain:실행하는 메인클래스
-studentManager:학생관리클래스(control). 학생 정보 입력과 출력 메소드 담당
-student:학생 정보 클래스(vo). 학생의 아이디,이름,성별 속성이 있음. getter/setter
package sh.java.object.array.student; import java.util.Scanner; /** *<pre> * @author user1 * 2023-09-25 * 실행클래스(main method 포함) * * 의존관계(Dependency) * -studentMain의 메소드에서 지역변수로 StudentManager 클래스 사용 * * */ public class StudentMain { public static void main(String[] args) { StudentManager sm = new StudentManager(); Scanner sc = new Scanner(System.in); // sm.inputStudents(); // sm.printStudents(); String menu = "==============\n" + "학생 관리 프로그램\n" + "==============\n" + "1.학생 정보 입력\n" + "2.학생 정보 출력\n" + "0.종료\n" + "=============="; while(true) { System.out.println(menu); System.out.println("번호를 입력해주세요....>"); String choice = sc.next(); switch(choice) { case "1": //입력 sm.inputStudents(); break; case "2": //출력 sm.printStudents(); break; case "0": System.out.println("이용해 주셔서 감사합니다."); return; default: System.out.println("잘못 입력 하셨습니다."); break; } } } }
package sh.java.object.array.student; import java.util.Scanner; /** * @author user1 * 2023-09-25 * 관리자 클래스 * -Student 객체를 배열로 관리한다. * -field : Student[] * -method : 정보 입력, 정보 출력 (person메인에서 했던 것을 분리) * * StudentManager가 Student클래스 객체를 사용 * Has-a 포함관계 * StudentManager has a Student. * */ public class StudentManager { public static final int MAX_STUDENT = 10;//학생 최대수 상수로 고정 private Student[] students = new Student[MAX_STUDENT]; private int studentIndex = 0; //실제 입력값을 가리킬 인덱스변수.and 현재까지 입력된 학생수 private Scanner sc = new Scanner(System.in); //입력 char[]s = new char[] {'첫','두','세'}; public void inputStudents() { System.out.println("학생 정보를 입력해주세요....(최대 학생 수는:"+MAX_STUDENT+"명입니다.)"); for(int i=0; i<MAX_STUDENT; i++) { System.out.println((MAX_STUDENT+1)+"번째 학생 번호를 입력해주세요."); long id = sc.nextLong(); System.out.println((MAX_STUDENT+1)+"번째 학생 학생 이름을 입력해주세요."); String name = sc.next(); System.out.println((MAX_STUDENT+1)+"번째 학생 성별을 입력해주세요.(M/F)"); char gender = sc.next().toUpperCase().charAt(0); students[studentIndex++] = new Student(id,name,gender); System.out.println("더 입력하시겠습니까?(y/n)"); char yn = sc.next().charAt(0); if(yn!='y') break; } System.out.println("입력이 완료되었습니다."); } //출력 public void printStudents() { System.out.println("==============================="); System.out.println("학생 정보를 출력합니다."); for(int i=0; i<studentIndex; i++) //학생 입력수만큼만 반복 { System.out.printf("아이디:%d 이름:%s 성별:%c\n", students[i].getId(),students[i].getName(),students[i].getGender()); } } }
package sh.java.object.array.student; /** *<pre> * @author user1 * 2023-09-25 * VO클래스 * */ public class Student { private long id; private String name; private char gender; public Student() { } public Student(long id, String name, char gender) { this.id = id; this.name = name; this.gender = gender; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", gender=" + gender + "]"; } }
코드 수정 전 max_student로 학생 수 만큼 for문으로 정보 출력 시,
nullpointException이 발생할 수 있다.
while문으로 원하는 만큼 학생 정보를 입력하는데, 배열의 길이는 10이지만
입력되어 null값이 아닌 주소값이 들어간 배열은 10이하임.
가령 5번째학생까지 입력했다면 0~4까지만 값이 들어있는 거고 그 다음부턴 기본값인 null값이 들어있다는 것.
그래서 배열 길이인 10만큼 반복한다면 [5]부터는 null이라 가져올 값이 없기때문에 nullpointException 발생
max_student 보다는 현재까지 입력된 학생수를 기록할만한 cnt변수(studentIndex)를 따로 둬서 관리해두는게 편하다.
'공부' 카테고리의 다른 글
1006(16일차) (0) 2023.10.06 1005(15일차) (0) 2023.10.05 1004 14일차 (2) 2023.10.04 0927 13일차 (0) 2023.09.27 0926 12일차 (0) 2023.09.26 다음글이 없습니다.이전글이 없습니다.댓글