📌 Java Study
🔸 2022-08-03 수요일
[클래스와 객체]
1. this
- 자신의 메모리를 가리킴
- 생성자에서 다른 생성자를 호출
- 인스턴스 자신의 주소를 반환
public Person() {
this("이름 없음", 1);
}
public Person(String naem, int age) {
this.name = name;
this.age = age;
}
- 생성자의 역할 => 인스턴스의 값을 초기화
- 인스턴스가 모두 생성되지 않았는데, 무슨 일을 하려면 문제 발생 가능
- this 로 다른 객체를 생성할 때, 항상 first statement 이어야 함.
public Person() {
age = 100; // 다른 statement 오면 오류 발생
this("이름 없음", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Person personNoname = new Person();
personNoname.showInfo();
Person personHeo = new Person("Heo", 20);
personHeo.showInfo();
System.out.println(personHeo); // exthis.Person@1a1d6a08
Person p = personHeo.getSelf();
System.out.println(p); // exthis.Person@1a1d6a08
}
public Person getSelf() {
return this;
}
- 참조 변수
personHeo
와 참조 변수가 가져온 getSelf()
메서드를 찾아가보면 this 값 리턴
- 따라서 둘이 가리키는 메모리 값은
exthis.Person@1a1d6a08
으로 동일
2. 객체 간 협력
- 객체지향 프로그램은 객체를 정의하고 객체 간의 협력을 구현한 프로그램
- 정보 은닉 예제 직접 코딩해보기(ExMyDate)
- day, month, year 변수는 private으로 선언
- 각 변수의 getter, setter를 public 으로 구현
- ExMyDate(int day, int month, int year) 생성자 만들기
- public boolean isValid() 메서드를 만들어 날짜가 유효한지 확인
- ExMyDateTest 클래스에서 생성한 ExMyDate 날짜가 유효한지 확인
- 모든 멤버 변수를 private로 설정(boolean 까지)
- 이 때,
isValid = true
설정
- setYear, 연도 설정 시 정상 연도인지 구분하기 위해
Calendar
import 후 getInstance() 메서드 사용
- setMonth, 1 ~ 12개월 정상 범위를 벗어난 값에 대하여
isValid = false
설정
- setDay, switch 문으로 30일, 31일 있는 달을 구분하고, 윤년을 구분하기 위해 조건문 설정
- showDate 메서드로
isValid = true
와 isValid = false
로 각 헤당하는 구문 출력 가능토록 구현
- Menu 클래스에
public static final int STARLATTE = 4500;
에서 static fianal
을 추가하니 오류가 정정됨
static final
=> 클래스 내부 도는 외부에서 참조의 용도로만 선언된 변수는 이 같이 선언
- static, final, static final 정리
static
=> 객체 생성 없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 활용
final
=> 해당 변수는 값이 저장되면 최종 값이 되므로, 수정이 불가능하다는 의미
static final
=> 모든 영역에서 고정된 값으로 사용되는 상수
🔖 Eclipse 실습
🔖 Eclipse 출력 Console