자바 공부기록8일차
참조자료형이란 크기가 정해진 기본 자료형(int,char,float,double 등)으로 선언하는 변수가 있고,클래스 자료형으로 선언하는 참조 자료형 변수가 있다.
참조 자료형 변수의 특징에 대해 더 자세히 알아보자.
한 학생이 있고 이 학생은 국어와 수학 과목을 수강한다. 시범을 치룬 뒤에 국어와 수학 성적 정보를 저장하는 프로그램을 만들려고 한다.
✍잠깐 메모
객체 지향 프로그래밍을 만들 때는 일단 클래스를 어떻게 만들지 부터 생각해봐야한다.
먼저 클래스가 제공해야 할 멤버변수와 메서드를 생각하고 이를 바탕으로 학생 클래스를 만들어 보자.
public class Student1 {
int studentID;
String studentName;
int KoereaScore;
int mathScore;
}
여기에서 String이 JDK에서 제공하는 참조자료형이다. 나머지 변수는 기본자료형이다.
여기서 귀찮음이 발생한다. 성적을 저장하는 변수가 두 개인데 만약 성적뿐만 아니라 이 학생이 수강하는 과목의 이름도 함께 저장해야 한다면 어떻게 해야할까?
간단하게 String을 사용해서 과목이름 변수까지 추가할 수 있긴하다. 하지만 학생클래스인데 과목과 관련된 변수가 늘어나 가독성이 떨어질 경우가 생긴다.
그래서 이 문제를 해결하기 위해 과목의 이름과 성적을 다른 클래스로 분리해주고 학생에 Subject변수를 각 과목 별로 추가해 준다.
-과목 클래스
public class Subject{
String SubjectName;
int scorePoint;
}
-학생 클래스
public class Student {
int studentID;
String studentName;
Subject Korean;
Subject math;
}
Subject형을 사용하여 선언하였다. 이렇게 구현하면 달라지는 것이 무엇일까?
Subject로 클래스를 분리하면 SubjectName은 Subject 클래스에 선언하여 정리할 수 있고, korean.subjectName으로 사용하고 수학과목 이름은 math.subjectName으로 사용할 수 있어 편리하다.
클래스를 만들고 멤버 변수, 메서드, 생성자 등을 만들 때 public 예약어를 많이 사용했다. 이 예약어의 의미를 알아보자.
객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다. 이러한 예약어를 접근제어자(access modifier)라고 한다.
public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며 외부 클래스가 사용할 수 있다는 뜻이다.
반대로 접근 제어자를 private으로 선언한 변수나 메서드는 외부 클래스에서 사용할 수 없다.
그러면 private으로 선언한 변수를 외부 코드에서 사용하려면 어떻게 해야할까?
변수를 사용할 수 있도록 public메서드를 제공해야 한다. public메서드가 제공되지 않는다면 변수에 접근할 방법이 없다. 이때 사용할 수 있는 것이 get( ), set( ) 메서드이다.
다음 예시를 보자.
public class Student {
int studentID;
private String studentName;
int grade;
String address;
public String getStudentName( ) {
return studentName;
}
public void setStudentName(String studentName){
this.studentName = studentName;
}
}
위는 private변수인 studentName에 접근해 값을 가져오는 public get( )메서드
아래는 private변수인 studentName에 접근해 값을 지정하는 public set( )메서드
✍잠깐 메모
get메서드 구조
접근 제어자
자료형
get
멤버변수 ()
{
return
멤버변수;
}
set메서드 구조
접근 제어자
void
set
멤버변수
(자료형 멤버변수)
{
this
.
멤버변수
=
멤버변수;
ㅤ
ㅤ
✍잠깐 메모
get( ), set( )메서드는 이클립스에서 자동으로 만들 수 있다. 멤버변수를 선언한 클래스 안에서 오른쪽 마우스를 클릭하고 [Source → Getters and Setters...]메뉴를 클릭하고 메서드를 추가하고 싶은 멤버 변수를 선택하고 ok를 누르면 생성된다.
이제 외부에서 private으로 선언한 멤버변수를 사용하는 클래스를 만들어 보자.
public class StudentTest {
public studentLee = new Student();
//studentLee.studentName = ("이상원");
studentLee.setStudentName("이상원");
system.out.println(studentLee.getStudentName());
}
}
studentName 멤버변수에 이름 값을 직접 대입하지 않고 setStudentName( )메서드를 활용하여 값을 대입할 수 있다. 즉 외부 클래스에서 private변수에 직접 접근할 수는 없지만, public메서드를 통하면 private변수에 접근할 수 있다.