JAVA

[java]getter/setter

라텐느 2024. 8. 18. 12:40

20240816수업

field 변수를 private 으로 설정했을때 값을 가져오거나 수정하려면 getter/sestter 만들기
getter
접근 제한자 public(외부에서 수정하기 위함)
return타입 field타잆
메소드 이름  get+필드 이름
rerturn값 field값
setter
접근 제한자 public(외부에서 수정하기 위함.)
return타입 void
메소드 이름 set+필드 이름
매개변수 타입 field 타입

 

 

package ex01;

import java.util.Scanner;

class Student {
	//Fields-외부에서 접근하지 못하도록 private로 작업할 것
	// 입력:번호,이름,국어,영어,수학
	private int num;
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	// 출력용: 번호,이름,국어,영어,수학, 총점, 평균, 학점
	private int tot;
	private double avg;
	private char grade;
	
	//수정:setter
	public void setNum(int num) { //void는 Student class로 return해준다.
		this.num=num;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setKor(int kor) {
		if(0<=kor&&kor<=100) { //잘못된 데이터 입력을 거를 수 있다.
			this.kor=kor;
		}else this.kor=0;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}//tot,avg,grade식은 수정필요X
	
	//가져오기 getter
	public int getNum() {
		return this.num;
	}
	public String getName() {
		return name;
	}
	public int getKor() {
		return kor;
	}
	public int getEng() {
		return eng;
	}
	public int getMat() {
		return mat;
	}	
	public int getTot() {
		return tot;
	}
	public double getAvg() {
		return avg;
	}
	public char getGrade() {
		return grade;
	}

	//Constructor
	public Student() {
		Scanner in = new Scanner(System.in);
		System.out.println("입력:번호,이름,국어,영어,수학");
		String Line = in.nextLine();
		String [] li = Line.trim().split(",");
		this.num        =  Integer.parseInt( li[0].trim() ); 
		this.name       =  li[1].trim(); 
		this.kor        =  Integer.parseInt( li[2].trim() ); 
		this.eng        =  Integer.parseInt( li[3].trim() ); 
		this.mat        =  Integer.parseInt( li[4].trim() );  		
	}
	
	// Methods
	private void getTotal() {
		this.tot = this.kor + this.eng + this.mat; 
	}
		
	private void getAverage() {
		this.avg = (this.kor + this.eng + this.mat) / 3.0;		
	}
		
	private void getStudentGrade() {
		//             0   1   2   3   4   5   6   7   8   9   10
		char []  g = {'F','F','F','F','F','F','D','C','B','A','A'};
		this.grade = g[(int) this.avg / 10];		
	}
	
	public void display() {
		String  title = "번호 이름 국어 영어 수학  총점  평균  학점";
		String  msg   = title + "\n";
		String  fmt   = "%d  %s  %d  %d  %d  %d  %.3f  %c";
		
		// process()
		getTotal();
		getAverage();
		getStudentGrade();
		
		msg  += String.format(fmt, 
			 	this.num, this.name,  
			 	this.kor, this.eng, this.mat,
			 	this.tot, this.avg, this.grade );
		System.out.println(msg);
	}
	
	// toString
	@Override
	public String toString() {
		return "Student [num=" + num + ", name=" + name + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat + ", tot="
				+ tot + ", avg=" + avg + ", grade=" + grade + "]";
	}
}
package ex01;

import java.util.Scanner;

/*
번호,이름,국어,영어,수학
1,사나,70,80,90
2,모모,0,70,100
3,쯔위,70,90,90
4,정연,80,90,70
5,원영,90,90,89
6,유진,100,100,100
*/

public class StudentTest01 {

	public static void main(String[] args) {
		
		Student  s1 = new Student(); //class Student호출
		s1.display();
		//s1.tot = 100;      // 외부에서 총점을 수정하면 안됨 
		//System.out.println(s1.tot); // tot 는 private   
			
		// 성적을 수정하려면 외부에서 field 변수를 접근할 수있는 기술 필요 
        // >>getter / setter 함수를 사용
		System.out.println( s1.getNum() );
		
	}

}

new 연산자를 통해 메모리(Heap 영역)에 데이터를 저장할 공간을 할당받고 그 공간의 참조값(reference value /해시코드)을 객체에게 반환하여 주고 이어서 생성자를 호출하게 된다. instance를 조정하기 위해서는 new 연산자를 통해 참조값을 저장한 객체로만 접근이 가능하다.

 

클래스 객체변수 = new 클래스();
자료형 참조값 저장(instance) 메모리(Heap) 할당 instance 생성, 참조값 return(⇾객체) 생성자 호출