정보 은닉
1. 기본 생성자 출력
//231204
package test5_3;
//정보 은닉 → 멤버 변수 앞에 접근 제어자를 붙여서 새로운 데이터값을 대입하거나 그러지 못하도록 함
public class Student {
//public과 private 구분
int studentID;//default : 아무런 접근 제어자를 지정하지 않은 경우, 동일한 패키지 내에서만 접근 가능
private String studentName;//private : 자신의 클래스 내에서만 접근 가능
public int grade;//public : 외부 클래스 어느 곳에서나 접근 제한이 없음
public String address;
//생성자를 하나라도 만들지 않으면 컴파일러가 기본생성자(default construct)형식으로 생성 및 추가하여
//멤버 변수의 자료형이 가지고 있는 기본값으로 멤버 변수에 데이터값을 초기화시킴
public Student() {}
//멤버 변수 내의 데이터값을 출력해주는 일반 메서드
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
//231204
package test5_3;
public class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.show();
}
}
2. private 특징
//231204
package test5_3;
//정보 은닉 → 멤버 변수 앞에 접근 제어자를 붙여서 새로운 데이터값을 대입하거나 그러지 못하도록 함
public class Student {
//public과 private 구분
int studentID;//default : 아무런 접근 제어자를 지정하지 않은 경우, 동일한 패키지 내에서만 접근 가능
private String studentName;//private : 자신의 클래스 내에서만 접근 가능
public int grade;//public : 외부 클래스 어느 곳에서나 접근 제한이 없음
public String address;
//생성자를 하나라도 만들지 않으면 컴파일러가 기본생성자(default construct)형식으로 생성 및 추가하여
//멤버 변수의 자료형이 가지고 있는 기본값으로 멤버 변수에 데이터값을 초기화시킴
public Student() {}
//멤버 변수 내의 데이터값을 출력해주는 일반 메서드
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
//231204
package test5_3;
public class Student_Main {
public static void main(String[] args) {
Student s = new Student();
s.show();
System.out.println("------------------");
s.studentID = 231204;
//studentName은 나타나지 않음. Student class에서 접근 제어자 private로 설정해두었기 떄문이다.
//즉 private 접근 제어자로 멤버 변수에 새로운 데이터값을 대입하지 못함.
//s.studentName = "고주몽";
s.grade = 3;
s.address = "고구려";
s.show();
}
}
private 접근 제어자로 대입할 수 없는 멤버 변수에 데이터값을 넣는 방법을 알아보자
필요시에 멤버 변수에 데이터값을 넣어야 하는 경우가 필요하다.
세터(setter, 설정자), 게터(getter, 접근) 메서드를 이용
//231204
package test5_3;
//정보 은닉 → 멤버 변수 앞에 접근 제어자를 붙여서 새로운 데이터값을 대입하거나 그러지 못하도록 함
public class Student {
//public과 private 구분
int studentID;//default : 아무런 접근 제어자를 지정하지 않은 경우, 동일한 패키지 내에서만 접근 가능
private String studentName;//private : 자신의 클래스 내에서만 접근 가능
public int grade;//public : 외부 클래스 어느 곳에서나 접근 제한이 없음
public String address;
//생성자를 하나라도 만들지 않으면 컴파일러가 기본생성자(default construct)형식으로 생성 및 추가하여
//멤버 변수의 자료형이 가지고 있는 기본값으로 멤버 변수에 데이터값을 초기화시킴
public Student() {}
//private로 선언한 studentName 변수를 외부에서 사용
//필요 시 멤버 변수에 데이터값을 넣어야하는 경우가 필요할 때가 있음
//setter(설정자), getter(접근자) 메서드 사용
//getter 메서드 : 멤버 변수에 저장된 데이터값을 가져오는 역할
public String getStudentName() {
return this.studentName;//호출하는 곳으로 반환값(결과값)을 반환
}
//setter 메서드 : 멤버 변수에 새로운 데이터 값을 저장하는 역할
public void setStudentName(String studentName) {
//멤버변수 = 매개변수;
this.studentName = studentName;
}
//멤버 변수 내의 데이터값을 출력해주는 일반 메서드
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
//231204
package test5_3;
public class Student_Main {
public static void main(String[] args) {
Student s = new Student();
s.show();
System.out.println("------------------");
s.studentID = 231204;
//studentName은 나타나지 않음. Student class에서 접근 제어자 private로 설정해두었기 떄문이다.
//즉 private 접근 제어자로 멤버 변수에 새로운 데이터값을 대입하지 못함.
//s.studentName = "고주몽";
//private로 선언한 studentName 변수를 외부 코드에서 사용하려면 get(), set() 메서드를 사용해야한다.
s.grade = 3;
s.address = "고구려";
s.show();
System.out.println("------------------");
//System.out.println(s.StudentName());//오류 발생
//getter로 데이터값 확인
System.out.println("s.getStudentName() = " + s.getStudentName());//null 출력
System.out.println("------------------");
//setter로 데이터값 넣기
s.setStudentName("고주몽");
s.show();
}
}
private 변수 1개에 setter, getter 하나씩 있어야한다.
실습1) public int grade에서 private int grade 변경
//231204
package test5_3;
public class Student1 {
int studentID;
private String studentName;
private int grade;
public String address;
public String getStudentName() {
return this.studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getGrade(int grade) {
return this.grade = grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
//231204
package test5_3;
public class Student_Main1 {
public static void main(String[] args) {
Student1 s = new Student1();
s.show();
System.out.println("-----------------");
s.studentID = 231204;
s.address = "철원";
s.show();
System.out.println("-----------------");
//setter로 데이터값 넣기
s.setGrade(2);
s.show();
System.out.println("-----------------");
s.setStudentName("궁예");
s.show();
}
}
실습2)
//231204
package test5_3;
public class Student2 {
public int studentID;
private String studentName;
public int grade;
public String address;
//기본생성자
public Student2() {}
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
여기서 우클릭 Generate Getters and Setters 클릭하면 그림 5(오른쪽 그림)와 같이 체크한 후 Gnerate 클릭하면 자동으로 생성해준다.
※단축키 : Alt + Shift + S
//231204
package test5_3;
public class Student2 {
public int studentID;
private String studentName;
public int grade;
public String address;
//기본생성자
public Student2() {}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public void show() {
System.out.println("studentID = " + studentID);
System.out.println("studentName = " + studentName);
System.out.println("grade = " + grade);
System.out.println("address = " + address);
}
}
//231204
package test5_3;
public class Student_Main2 {
public static void main(String[] args) {
Student2 s = new Student2();
s.show();
System.out.println("--------------------");
s.studentID = 231204;
s.grade = 2;
s.address = "한양";
s.show();
System.out.println("--------------------");
s.setStudentName("이성계");
s.show();
System.out.println("--------------------");
}
}
this 예약어
클래스의 멤버변수와 메서드안에서만 사용되는 매개변수의 구분을 명확하기 위해 사용
클래스 내의 멤버 변수에 접근할 수 있음
자기 자신(객체)의 메모리 주소를 나타냄
객체 자신의 참조가 필요할 경우에 사용
생성된 인스턴스 스스로를 가리키는 예약어인데 이 외에도 다른 역할로 this를 사용할 수 있음
자신의 메모리를 가리키는 this
자신의 멤버에 접근 : this.멤버변수
//231204
package test6;
//설계도 클래스
//.java 형식으로 존재하지 않고 컴파일해서 사용할 때 존재하게 됨.(bin 폴더 내에 .class로만 존재)
class BirthDay1{
public int day;
public int month;
private int year;
//기본 생성자
public BirthDay1() {}
//접근자 : getter
public int getYear() {
return year;
}
//생성자 : setter
public void setYear(int year) {
this.year = year;
}
//this 출력 메서드 : 클래스내에서 자신을 출력해보는 메서드
public void printThis() {
System.out.println(this);//객체(인스턴스)를 생성하면 객체명이 됨
}
public void show() {
System.out.println("day = " + day);
System.out.println("month = " + month);
System.out.println("year = " + year);
}
}
public class ThisExample1 {
public static void main(String[] args) {
BirthDay1 b = new BirthDay1();
b.show();
System.out.println("-------------------");
b.setYear(2000);
System.out.println("b.getYear() = " + b.getYear());
System.out.println("-------------------");
b.show();
System.out.println("-------------------");
b.printThis();
}
}
생성자에서 다른 생성자를 호출하는 this
생성자에서 다른 생성자를 호출 : this()
//231204
package test6;
class Person{
public String name;
public int age;
//기본 생성자
Person(){}
//일반 생성자 : 1)객체 생성 시 이름을 넣어주지 않으면 객체를 생성해주지 않음
public Person(String name) {
this.name = name;
}
//일반 생성자 : 2) 객체 생성 시 이름, 나이를 넣어주지 않으면 객체를 생성해주지 않음
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//멤버 변수 내의 데이터값을 출력하는 메서드
public void show() {
System.out.println("이름 = " + name);
System.out.println("나이 = " + age);
}
}
public class CallAnotherConst {
public static void main(String[] args) {
//기본 생성자를 호출해서 멤버 변수의 데이터값을 초기화해서 객체 생성
Person p = new Person();
p.show();
System.out.println("----------------");
//일반 생성자 1)
Person p1 = new Person("단군");
p1.show();
System.out.println("----------------");
//일반 생성자 2)
Person p2 = new Person("단군", 1000);
p2.show();
}
}
//231204
package test6;
class Person1{
public String name;
public int age;
//기본 생성자
Person1(){
this("단군",20);
// ==
//this.name = "단군";
//this.age = 1000;
}
public Person1(String name, int age) {
this.name = name;
this.age = age;
}
//멤버 변수 내의 데이터값을 출력하는 메서드
public void show() {
System.out.println("이름 = " + name);
System.out.println("나이 = " + age);
}
}
public class CallAnotherConst1 {
public static void main(String[] args) {
//기본 생성자를 호출해서 멤버 변수의 데이터값을 초기화해서 객체 생성
Person1 p = new Person1();
p.show();
System.out.println("----------------");
}
}
'KDT > Java' 카테고리의 다른 글
231207 Java (0) | 2023.12.07 |
---|---|
231206 Java (0) | 2023.12.06 |
231130 Java (0) | 2023.11.30 |
231129 Java (0) | 2023.11.29 |
231127 Java (0) | 2023.11.27 |