멤버 변수에 직접 값을 대입을 지양해야한다.
why? 통제가 불가능하기 때문에!
public : 모든 패키지에서 접근이 가능
protected : 동일 패키지에서 접근 가능(default) + 외부 패키지에 있는 클래스에서 상속을 받으면 클래스 내부에서 접근 가능(private)
default : 동일 패키지에서 접근 가능(접근 제어자 명시 X)
private : 클래스내부의 메서드 내에서만 접근 가능
package exam03;
public class Ex01 {
public static void main(String[] args) {
exam02.A a = new exam02.A(); //
// 다른 패키지 : 클래스이름앞에 패키지를 써야한다
// 같은 패키지 : 생략가능
// A a = new A(); //오류
}
}
package exam03;
import exam02.A;
public class Ex01 {
public static void main(String[] args) {
A a = new A();
//다른패키지이지만, import 사용하면 생략가능
}
}
package exam02;
public class A { //exam02.A
public int numA;
int numAA; // default 접근 제어자, 동일패키지만 접근가능.
}
package exam03;
import exam02.*;
public class Ex01 {
public static void main(String[] args) {
//exam02.A a = new exam02.A(); //
// 다른 패키지 : 클래스이름앞에 패키지를 써야한다
// 같은 패키지 : 생략가능
A a = new A(); //다른패키지이지만, import 사용하면 생략가능
B b = new B();
a.numA=5;
//a.numAA=5; 오류
}
}
public class Schedule {
private int year;
private int month;
private int day;
public void setYear(int _year){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
year = _year;
}
public void setMonth(int _month){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
month = _month;
}
public void setDay(int _day){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
day = _day;
}
void showDate(){
System.out.printf("year : %d, month : %d, day : %d\n",year,month,day);
}
}
package exam02;
public class Ex01 {
public static void main(String[] args) {
Schedule s1 = new Schedule();
s1.setYear(2024);
s1.setMonth(2);
s1.setDay(31);
s1.showDate();
}
}
package exam02;
public class Schedule {
private int year;
private int month;
private int day;
public void setYear(int _year){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
year = _year;
}
public void setMonth(int _month){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
month = _month;
}
public void setDay(int _day){ //멤버 변수의 값을 확인할 수 있는 접근 가능한 메서드 추가(set)
if(month == 2 && _day>28){
_day=28;
}
day = _day;
}
public int getYear(){
return year;
}
public int getMonth(){
return month;
}
public int getDay(){
return day;
}
void showDate(){
System.out.printf("year : %d, month : %d, day : %d\n",year,month,day);
}
}
package exam02;
public class Ex01 {
public static void main(String[] args) {
Schedule s1 = new Schedule();
s1.setYear(2024);
s1.setMonth(2);
s1.setDay(31);
int year = s1.getYear();
int month = s1.getMonth();
int day = s1.getDay();
System.out.printf("%d %d %d\n",year,month,day);
s1.showDate();
}
}
package exam01;
public record Schedule2(int year, int month, int day) {
}
package exam01;
public class Ex04 {
public static void main(String[] args) {
Schedule2 s1 = new Schedule2(2024,4,17);
int year = s1.year();
int month = s1.month();
int day = s1.day();
System.out.printf("%d, %d, %d",year, month, day);
System.out.println(s1);
}
}