충분히 쌓여가는
접근자 메소드(get method) / 변경자 메소드(set method 본문
접근자 메소드
모든 객체 변수들을 private로 만든다면 그 변수들에 대한 접근을 제한함
만약 다른 클래스에서 그 변수에 접근할 필요가 있을 수 있다
이때 접근자 메소드를 제공해야함
- 객체 변수에 저장되어 있는 값을 알 수 있게 해주는 메소드
- 필요한 값을 계산해서 알려주는 메소드
- 객체 변수의 값을 반환하거나 계산된 값을 반환함
- 만약 한 접근자 메소드에 대한 접근을 같은 클래스 내로 제한하려면 그 메소드를 private로 선언하면됨
- 접근자 메소드는 값을 반환하여 호출된 메소드가 원하는 값을 얻게 해주므로 get 메소드라고 부르기도 함
- 따라서 접근자 메소드의 이름은 관례적으로 get으로 시작함
변경자 메소드
- 객체 변수의 값을 바꾸는 메소드
- 보통 객체 변수의 값을 매개변수로 넘어오는 값으로 변경함
- 변경자 메소드는 자주 객체 변수의 값을 변경하는 것을 제한하기 위해 사용됨
- 한 변경자 메소드에 대한 접근을 같은 클래스 내로 제한하려면 그 메소드를 private로 선언하면 됨
- 변경자 메소드는 객체 변수의 값을 새로운 값으로 바꾸게 하므로 set 메소드라고 부르기도함
- 따라서 변경자 메소드의 이름은 관례적으로 set으로 시작함
예시 1. 객체 변수의 값을 알려 주는 접근자 메소드와, 객체 변수의 값을 넘겨 받은 매개변수의 값으로 변경하는 변경자 메소드를 추가한 프로그램
// 학생의 성적 기록을 나타냄
import java.util.Scanner;
public class Student2 {
// 객체 변수들
private String name;
private int assignmentScore;
private int examScore;
// 접근자 메소드
// 학생의 이름 반환
public String getName()
{
return name;
}
// 학생의 과제 점수 반환
public int getAssignmentScore()
{
return assignmentScore;
}
// 학생의 시험 점수 반환
public int getExamScore()
{
return examScore;
}
// 학생의 학점 반환
public char getGrade()
{
char letterGrade; // 학생의 학점
double total; // 학생의 점수들의 총점
// 학생의 점수들의 총점을 계산함
total = getAssignmentScore() * 0.4 + getExamScore() * 0.6;
// 총점에 따라 학점을 부여
if (total >= 90) letterGrade = 'A';
else if (total >= 80) letterGrade = 'B';
else if (total >= 70) letterGrade = 'C';
else if (total >= 60) letterGrade = 'D';
else letterGrade = 'F';
return letterGrade;
}
// 현 Student 객체의 정보에 대한 문자열을 반환
public String toString()
{
String str = "";
str += "이름: " + name + "\n";
str += "과제 점수: " + assignmentScore + "\n";
str += "시험 점수: " + examScore + "\n";
str += "학점: " + examScore + "\n";
return str;
}
// 변경자 메소드
// 이름을 주어진 값을 변경함
public void setName(String Name)
{
name = Name;
}
// 과제 점수를 주어진 값으로 변경
public void setAssignmentScore(int AssignmentScore)
{
assignmentScore = AssignmentScore;
}
// 시험 점수를 주어진 값으로 변경
public void setExamScore(int ExamScore)
{
examScore = ExamScore;
}
}
예시 2. 예시 1에서 Student2 클래스의 모든 객체 변수들이 private로 선언되어서 그 변수들에 직접적으로 접근할 수 없어 그 변수들의 값들을 변경하기 위해 set 메소드를 호출함
- ex. stud1이 가리키는 객체의 이름을 '선남'으로 변경하기 위해 stud1.setName("선남"); 사용
// Student2 클래스와 그 메소드들을 사용
public class Student2Driver {
public static void main(String[] args) {
// 첫 번째 학생을 나타내는 객체 만듬
Student2 stud1 = new Student2();
// 첫 번째 학생의 이름 정함
stud1.setName("선남");
// 첫 번째 학생의 과제 점수 줌
stud1.setAssignmentScore(91);
// 첫 번째 학생의 시험 점수 줌
stud1.setExamScore(84);
// 첫 번째 학생의 이름, 점수들과 학점을 출력
System.out.println(stud1.toString());
// 두 번째 학생을 나타내는 객체 만듬
Student2 stud2 = new Student2();
// 두 번째 학생의 이름 정함
stud2.setName("선녀");
// 두 번째 학생의 과제 점수 줌
stud2.setAssignmentScore(86);
// 두 번째 학생의 시험 점수 줌
stud2.setExamScore(95);
// 두 번째 학생의 이름, 점수들과 학점을 출력
System.out.println(stud2.toString());
}
}
출력 결과
이름: 선남 과제 점수: 91 시험 점수: 84 학점: 84 이름: 선녀 과제 점수: 86 시험 점수: 95 학점: 95 |
'Java' 카테고리의 다른 글
생성자 메소드(Default constructor) (0) | 2023.02.06 |
---|---|
메소드 다중 정의(method overloading) (3) | 2023.02.04 |
접근 수정자(Access Modifier) public / private (0) | 2023.02.03 |
클래스 (0) | 2023.02.03 |
메소드 (0) | 2023.02.02 |