getter : 인스턴스 변수를 반환
setter : 인스턴스 변수를 대입하거나 수정
관습에 따라 getter은 변수 앞에 get, setter은 변수 앞에 set 이 붙고
그 변수들의 앞글자는 대문자로 한다.
getter와 setter를 사용하는이유?
객체의 무결성을 보장하기 위해 사용합니다.
예를 들어, 만약 외부에서 몸무게라는 필드에 직접 접근한다면 0보다 낮은 값을 줄 수도 있습니다. 이 경우 객체의 무결성이 깨지기 때문에 이를 방지하기 위해 Getter/Setter를 사용하여 데이터의 무결성을 지켜줍니다.
getter
본 필드의 값을 숨긴 채 내부에서 가공된 값을 꺼낼 수 있다.
setter
필드를 private로 만들어 외부의 접근을 제한한 후, setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어줄 수 있다.
단, 무분별한 setter 사용은 무결성을 해칠수 있다.
처음 보는 내용이라 이해가 되질 않는다 추후에 학습후 수정해야겠다.
접근 허용 범위
public > protected > default > private
(public 이 가장 많은 접근을 허용)
흠..느낌은 알겠지만 잘 모르겠다. 읽고 또 읽자 알 때 까지..
public class man <T> {
private T name;
//이름 필드
private T bloodtype;
//혈액형 필드
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public T getBloodtype() {
return bloodtype;
}
public void setBloodtype(T bloodtype) {
this.bloodtype = bloodtype;
}
}
public class mainGe {
public static void main(String[] args) {
man<String> man1 = new man<>();
//새로운 객체 생성시 원하는 타입을 부여하면 된다.
man1.setName("King");
man1.setBloodtype("A");
//선언시 스트링 타입으로 선언하여 스트링 데이터를 입력하였다.
System.out.println(man1.getName());
System.out.println(man1.getBloodtype());
}
}
제네릭은 클래스 또는 메서드에 사용 할 수 있습니다. 클래스 이름 뒤에 <> 문법 안에 들어가야 할 타입 변수를 지정합니다.
타입변수의 이름을 T로 사용하는 이유는 일종의 컨벤션입니다.
제네릭의 제한
4 다수의 타입변수를 사용 할 수 있습니다.
public class Generic<T, U, E> {
public E multiTypeMethod(T t, U u) { ... }
}
Optional<T>
자바로 프로그래밍 하다보면 정의되지 않은 객체에 대해 NULL값을 고려하게 되는 경우가 발생한다. 안정적인 실행을 위해서는 NULL값을 처리해 NPE(NullPointerException)가 발생하지 않게 체크해야 한다.
이러한 상황을 위해 Java8에서는 Optional 클래스를 도입하여 NPE를 방지할 수 있도록 도와준다. Optional는 NULL이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE가 발생하지 않도록 도와준다.
Optional은 데이터를 Wrapping하고 다시 풀고, NULL일 경우에는 대체 함수를 호출하는 등의 오버헤드가 있으므로 성능이 저하될 수 있다.
orElse : Optional 안의 값이 NULL이든 아니든 항상 호출.
orElseGet : Optional 안의 값이 'NULL일 경우에만' 호출.
즉, "Optional은 메서드의 결과가 NULL이 될 수 있으며, 클라이언트가 이 상황을 처리해야 할 때 사용하는 것이 효율적이다."