참조 자료형
기본 자료형과 다르게 생성해서 사용해야 됨
클래스형으로 변수를 선언
기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름
참조 자료형을 사용할 때는 해당 변수에 대해 생성하여야 함
(String 클래스는 예외적으로 생성하지 않고 사용할 수 있음 - new 안 써도 사용 가능)
참조 자료형 정의하여 사용하기
- 학생이 수강한 과목들에 대한 성적을 산출하기 위한 경우 /
- 학생 클래스 속성에 과목이 모두 있으면 불합리
- 학생(Student)과 과목(Subject)에 대한 클래스를 분리하여 사용하고 / Subject 클래스를 활용하여 수강한 과목들의 변수의 타입으로 선언
선언된 Subject 변수는 생성된 인스턴스가 아니므로, Student의 생성자에서 생성하여 사용
1. 과목이라는 class - subject 생성 ( subject 많아지면 뒤에 배울 배열로 쓴다. )
2. 학생 class의 과목이라는 애의 데이터 타입은 subject 가 되는 것이다.
subject라는 클래스(과목)를 학생 쪽에서 변수로 가져다 쓴다.
3. 생성된 subject는 반드시 new 선언 후 사용한다.( string은 특별 제외)
보통 - 선언하고 그 문에서 new 선언 - 사용하기 전에만 하면 되긴 함
Subject class ( 과목 ) 생성
Subject class 호출 사용
생성자 new 반드시 필요
~
~
~
구현 클래스에서 테스트
~
~
~
잘 나옴 GOOD :)
접근 제어 지시자(access modifier)와정보은닉(information hiding)
접근 제어 지시자 ( accesss modifier )
- 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
- private : 같은 클래스 내부에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서도 접근 불가)
- 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가)
- protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근할 수 없음
- public : 클래스의 외부 어디서나 접근 할 수 있음
get()/ set() 메서드
- private으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
- get() 메서드만 제공되는 경우 read-only 필드
- 이클립스에서 자동으로 생성됨
- 사용하는 이유 -> 객체의 멤버 변수에 접근 제한을 가함으로써 오용 방지, 메서드 쪽만 보면 돼서 디버깅하기도 편함
- 사용하는 쪽에서 잘못 사용할 확률도 낮춰 줌
정보 은닉 ( information hiding )
private으로 제어한 멤버 변수도 public 메서드가 제공되면 접근 가능하지만 /
변수가 public으로 공개되었을 때보다 private 일 때 /
각 변수에 대한 제한을 public 메서드에서 제어할 수 있다.
객체 지향 프로그램에서 정보 은닉은 /
필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 /
객체의 오류를 방지하고 클라이언트 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.
public void setMonth(int month) {
if ( month < 1 || month > 12) {
isValid = false;
}
else {
this.month = month;
}
}
예제 ) 생일 날짜에 적합하냐 안 하냐 프로그램
1. 멤버 변수 선언
2. get, set 메서드 생성 ( 우클릭 - source - generate getters and setters~~ )
3. boolean isValid; 변수 추가 - 참/거짓 판단용 밖으로 내보낼일 없다. 보여줄 필요도 없다.
굳이 값을 알고 싶다면 get 메서드는 제공 가능 set 메서드는 불가능 - 값이 내부 로직에서만 판단되는 것이기 때문에
+ boolean의 디폴트 값은 false /
4. setMonth 생성자 메서드에 if 문 추가해줌 -
①
+ public이나 dafalut로 열어놓을 경우
사용할 때 month=100처럼 오용되어 사용할 수 있다. 방지하기 위해 private로 public메서드에서만 제어 가능하게 제한
③
②
④
+ isValid 변수가 멤버 변수이기때문에
class 안에서 1번이라도 False 되버리면
유효하지 않은 날짜로 판단.
initial 값이 false 이므로
isValid = true; 필요!
조건문에 맞춰
유효한지 안 한 지 잘 판단되어
출력됨 GOOD :)
day와 year 도 조건 생각하여
switch- case 문 적용해서 사용해보기
review
기본 자료형과 참조 자료형
접근 제어 지시자 / get/ set / 정보 은닉
public int num; // private int day;
막연히 따라 쓰기만 했던 코드들에 의미를 하나하나씩 배울 수 있었다.
subject 를 이용해서 학생의 과목을 불러와서 점수를 합치는 예제와
날짜 형식에 맞는 값인지 판단하는 예제를 해보고
여러 가지 실생활에서 적용 가능할 것 같아서 재미있었다.
자격증 시험 과목별 점수를 불러오고
그 과목별 커트라인을 넘는지 안 넘는지 판단하는 프로그램을
한 번 만들어 볼 수 있을 것 같다.
도저어언!
'JAVA 웹 개발 패키지 - 패스트캠퍼스 > Chapter2' 카테고리의 다른 글
Static / Static 응용 - 싱글톤 패턴 ( singleton pattern ) (0) | 2021.12.28 |
---|---|
캡슐화(encapsulation) / this가 하는 일 (0) | 2021.12.26 |
복습하기 - 객체지향, 함수, 생성자 (0) | 2021.12.26 |
함수와 메서드 (0) | 2021.12.25 |
객체와 객체 지향 프로그래밍 (0) | 2021.12.25 |