-
Java Study [2022-08-03] - 객체지향프로그래밍(this, cooperation)백엔드 2022. 8. 4. 01:22
📌 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
'백엔드' 카테고리의 다른 글
Java Study [2022-08-05] - 객체지향프로그래밍(static, singleton 문제 풀기) (0) 2022.08.06 Java Study [2022-08-04] - 객체지향프로그래밍(static, singleton) (0) 2022.08.05 Java Study [2022-08-02] - 객체지향프로그래밍(정보 은닉) (0) 2022.08.03 Java Study [2022-08-01] - 객체지향프로그래밍(생성자, 참조 자료형) (0) 2022.08.02 Java Study [2022-07-31] - 자바 기초 보충(자바의 정석) (0) 2022.08.01