JAVA 웹 개발 패키지 - 패스트캠퍼스/Chapter2

참조 자료형 변수 / 접근 제어 지시자 / 정보 은닉

giggs 2021. 12. 26. 14:33

 

참조 자료형

 

 

기본 자료형과 다르게 생성해서 사용해야 됨

 

클래스형으로 변수를 선언

기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름

참조 자료형을 사용할 때는 해당 변수에 대해 생성하여야 함
(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 를
이용해서 학생의 과목을 불러와서 점수를 합치는 예제와
날짜 형식에 맞는 값인지 판단하는 예제를 해보고
여러 가지 실생활에서 적용 가능할 것 같아서 재미있었다.

자격증 시험 과목별 점수를 불러오고
그 과목별 커트라인을 넘는지 안 넘는지 판단하는 프로그램을
한 번 만들어 볼 수 있을 것 같다. 

도저어언!