public class Student_Test
{
public static void main(String[] args)
{
Student st = new Student();
st.setName("토자맨");
System.out.println(st.getName());
}
}
5.5 생성자
package chapter5;
public class Person
{
String name;
float height;
public static void main(String[] args)
{
Person cho = new Person();
}
}
new Person() 의 Person()이 (디폴트)생성자이다.
생성자는 클래스 객체를 생성할 때 멤버 변수, 상수를 초기화 하는 역할을 한다.
디폴트 생성자는 생성자를 하나도 작성하지 않았을 때 컴파일러가 자동으로 생성해주는 생성자이다.
- 생성자를 직접 선언해주는 경우 -
public class Person
{
String name;
float height;
public Person() {} // 디폴트 생성자 직접 추가
public Person(String pname) // 매개변수를 받는 생성자 추가
{
name = pname;
}
}
위와같이 생성자를 직접 설정할 수 있으며 생성자를 하나라도 추가 했다면 디폴트 생성자는 자동으로 생성되지 않으므로 직접 디폴트 생성자를 작성해줘야한다(필수는 아님).
보통 특정 변수가 반드시 있어야 할 때 이용한다.
여러 생성자를 선언해주는 경우 필요한 생성자를 골라서 사용할 수 있다
5.6 참조 자료형
public class Student
{
String name;
Subject korean;
Subject mate;
}
public class Subject
{
String SubjectName;
int score;
}
String은 JDK(Java Development Kit)에서 제공하는 참조 자료형(클래스)이고
Subject는 사용자가 직접 만든 클래스를 사용한 참조 자료형이다.(c언어의 구조체 느낌)
5.7 정보 은닉
접근 제어자 : 클래스 내부의 변수나 메서드 생성자에 대한 접근 권한을 지정하는 예약어
public | 외부 클래스에서 접근 가능 |
---|---|
protected | 같은 패키지 내부와 상속 관계에서 접근 가능하고 그 외 클래스에서 접근 불가능 |
private | 같은 클래스 내부에서만 접근 가능 |
defalut | 같은 패키지 내부에서만 접근 가능(아무것도 적지 않음) |
public class Student
{
private String name;
}
name 변수를 private으로 선언
public class Student_Test
{
public static void main(String[] args)
{
Student st = new Student();
st.name = "cho";
System.out.println(st.name);
}
}
외부 클래스인 Student_Test 클래스에서는 Student 클래스의 private 변수에 접근할 수 없음
private 접근 제어자 때문에 변수에 직접 접근할 수 없는 경우 메서드(함수)를 이용해서 간접 접근하는 방법
public class Student
{
private String name;
public String getName()
{
return name;
}
public void setName(String stname)
{
this.name = stname;
}
}
private name 변수에 간접 접근하기 위해 public 메서드를 생성한다.
public class Student_Test
{
public static void main(String[] args)
{
Student st = new Student();
st.setName("토자맨");
System.out.println(st.getName());
}
}
다른 클래스에서 public 메서드를 이용해서 간접 접근한다.
정보 은닉이란? (굳이 private으로 변수를 설정하고 public 메소드로 간접 접근하는 이유)
public class MyDate
{
private int day;
private int month;
public void setDay(int day)
{
if (month == 2) {
if (day < 1 || day > 28)
System.out.println("오류입니다");
else
this.day = day;
}
}
}
만약 day, month 변수를 public으로 선언했다면 2월달은 28일까지 있지만 31일로 설정할 수도 있음. 즉 오류 발생 가능
따라서, 이러한 오류 발생 가능성을 차단하기 위해서 private으로 설정하고 public 메소드를 이용해서 간접 접근하면서 오류를 걸러주는 것
'Programming Language > 자바(JAVA)' 카테고리의 다른 글
Do it! 자바 프로그래밍 입문 / 9장 추상 클래스 (0) | 2023.01.04 |
---|---|
Do it! 자바 프로그래밍 입문 / 8장 상속 (2) | 2023.01.03 |
Do it! 자바 프로그래밍 입문 / 7장 배열과 ArrayList (0) | 2022.12.31 |
Do it 자바 프로그래밍 입문 연습문제 6장 (0) | 2022.12.30 |
Do it! 자바 프로그래밍 입문 / 6장 클래스와 객체 2 (0) | 2022.12.30 |