기록
  • 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
    댓글