728x90
set) 설정하는 것(변수값을 할당하는 것이기에 인자를 받아야 함)
get) 값을 가져오는 것(변수값을 반환하는 것이기에 return이 필요함)
set과 get을 사용하는 이유?
외부로부터 변수 값에 직접적으로 접근하는 것을 막기 위해서(무결성이 깨지는 것을 방지)
public class Box {
private Object obj;
// 필드에 값을 설정 -> 값을 받아와서 설정해야하므로 Object 타입으로 함
public void setObj(Object obj){
// this를 이용해 필드에 매개변수를 설정
this.obj = obj;
}
// 해당 Object에 값을 꺼내서 반환
public Object getObj(){
// return 필수
return obj;
}
}
- Box는 매개변수로 Object를 하나 받아들이고, Object를 반환한다.
public class Test {
public static void main(String[] args) {
Box box = new Box();
// box에 Object 객체를 생성해서 값을 넣어줌
box.setObj(new Object());
// 5번째 줄 = 7~8번째 줄
//Object someObject = new Object();
//box.setObj(someObject);
// box가 가지고 있는 Object 클래스를 리턴(값을 꺼냄)해서 obj에 담음
Object obj = box.getObj();
// box에 String 값을 넣어줌(Object 타입뿐만 아니라 Object의 후손도 가능)
box.setObj("hello");
// String 타입으로 받고 싶기 때문에 형변환을 해줌
String str = (String)box.getObj();
System.out.println(str);
// box에 Integer 값을 넣어줌
box.setObj(1);
// Integer 타입으로 받고 싶기 때문에 형변환을 해줌
int value = (int)box.getObj();
System.out.println(value);
}
}
- Object를 받아들일 수 있다는 것은 Object의 후손이라면 무엇이든 받아들일 수 있다는 것이다.
제너릭 사용) 형변환을 하지 않고 자동으로 재구성된다.
// E는 실제로 존재하는 클래스가 아닌 가상의 클래스
public class Box<E> {
private E obj;
public void setObj(E obj){
this.obj = obj;
}
public E getObj(){
return obj;
}
}
public class Test {
public static void main(String[] args) {
Box<Object> box = new Box<>();
box.setObj(new Object());
Object obj = box.getObj();
Box<String> box2 = new Box<>();
box2.setObj("hello");
String str = box2.getObj();
System.out.println(str);
Box<Integer> box3 = new Box<>();
box3.setObj(1);
int value = (int)box3.getObj();
System.out.println(value);
}
}
Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고,
사용 시에는 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있다.
728x90
'강의 정리하기 > JAVA' 카테고리의 다른 글
자바 IO(1) (0) | 2023.03.10 |
---|---|
Date 클래스, Calendar 클래스, java.time 패키지 (0) | 2023.03.09 |
기본 API 클래스(2) - 컬렉션 (0) | 2023.03.09 |
기본 API 클래스(1) (0) | 2023.03.08 |
Exception 예외처리(2) (0) | 2023.03.07 |