자바(Java) 프로그래밍, 클래스와 객체 Part 3
- 개발 스터디/Java
- 2024. 4. 13.
1. 참조 자료형
1-1. 참조 자료형이란?
크기가 정해진 기본 자료형으로 선언하는 변수가 있고,
클래스 자료형으로 선언하는 참조 자료형 변수가 있다.
학생 클래스 만들기 예제
package reference;
public class Student1 {
int studentID;
String studentName; //JDK에서 제공하는 참조 자료형
int koreanScore;
int mathScore;
}
package reference;
public class Student2 {
int studentID;
String studentName;
int koreanScore;
int mathScore;
String koreanSubject; // 과목 이름 변수 추가
String mathSubject;
}
이 클래스는 학생에 대한 클래스 과목에 대한 변수가 계속 늘어나고 있다.
이 문제를 해결하기 위해 과목의 이름과 성적을 Subject라는 클래스로 분리하고
학생에 Subject 변수를 각 과목별로 추가한다.
//과목 클래스 생성
package reference;
public class Subject {
String SubjectName;
int scorePoint;
}
package reference;
public class Student3 {
int studentID;
String studentName;
Subject korean; //Subject형을 사용하여 구현
Subject math;
}
기존 Student2 클래스에 과목 이름을 추가 하고 싶다면 과목에 해당하는 변수를 추가 해야 할것이다.
하지만 Subject로 클래스를 분리하면 subjectName은 Subject 클래스에 선언하면 된다.
그리고 국어 과목이름은 korean.subjectName으로 사용하고,
수학과목 이름은 math.subjectName으로 사용할 수 있어 편리 하다.
2. 정보 은닉
2-1. 접근 제어자 살펴보기
객제 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드,
생성자에 대한 접근 권한을 지정할 수 있다. 이러한 예약어를 '접근 제어자'라고 한다.
예로 public이란 예약어는 선언한 변수나 메서드가 외부 클래스에서
접근이 가능 하고 외부 클래스가 사용할 수 있다는 뜻이다.
반대로 private로 선언하면 변수나 메서드를 외부에서 사용할 수 없다.
package hiding;
public class Student {
int studentID;
private String studentName; //변수를 private로 선언
int grade;
String address;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
studentLee.studentName = "이재용"; //오류 발생
System.out.println(studentLee.getStudentName());
}
}
2-2. get(), set() 메서드
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
studentLee.setStudentName("이재용");
// setStudentName() 메서드를 활용해 private 변수에 접근 가능
System.out.println(studentLee.getStudentName());
}
}
Student 클래스에 getStudentName(), setStudentName() 메서드를 활용하고
StudentTest 클래스를 위와 같이 수정하면 외부 클래스에서 private 변수에
직접 접근을 할 수는 없지만, public 메서드를 통하면 private 변수에 접근할 수 있다.
2-3. 정보 은닉이란?
클래스 내부에서 사용할 변수나 메서드는 private로 선언해서
외부에서 접근하지 못하게 하는 것을 객체 지향에서는 '정보은닉'이라고 한다.
정보 은닉은 객체 지향 프로그래밍의 특징 중 하나이며 자바에선
접근 제어자를 사용하여 정보 은닉을 구현한다.
자바에서 사용하는 접근 제어자
접근 제어자 | 설명 |
public | 외부 클래스 어디에서나 접글할 수 있다. |
protected | 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다. |
아무것도 없는 경우 | default이며 같은 패키지 내부에서만 접근할 수 있다. |
private | 같은 클래스 내부에서만 접근할 수 있다. |
'개발 스터디 > Java' 카테고리의 다른 글
자바(Java) 프로그래밍, 클래스와 객체 Part 5 (0) | 2024.04.14 |
---|---|
자바(Java) 프로그래밍, 클래스와 객체 Part 4 (1) | 2024.04.14 |
자바(Java) 프로그래밍, 클래스와 객체 Part 2 (0) | 2024.04.13 |
자바(Java) 프로그래밍, 클래스와 객체 Part. 1 (0) | 2024.04.13 |
자바(Java) 프로그래밍, 반복문 - while문, do while문, for문 (0) | 2024.04.08 |