자바 학습

마동찬·2023년 4월 11일
0

getter와 setter

getter : 인스턴스 변수를 반환
setter : 인스턴스 변수를 대입하거나 수정
관습에 따라 getter은 변수 앞에 get, setter은 변수 앞에 set 이 붙고
그 변수들의 앞글자는 대문자로 한다.

  • getter와 setter를 사용하는이유?
    객체의 무결성을 보장하기 위해 사용합니다.
    예를 들어, 만약 외부에서 몸무게라는 필드에 직접 접근한다면 0보다 낮은 값을 줄 수도 있습니다. 이 경우 객체의 무결성이 깨지기 때문에 이를 방지하기 위해 Getter/Setter를 사용하여 데이터의 무결성을 지켜줍니다.

  • getter
    본 필드의 값을 숨긴 채 내부에서 가공된 값을 꺼낼 수 있다.

  • setter
    필드를 private로 만들어 외부의 접근을 제한한 후, setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어줄 수 있다.

단, 무분별한 setter 사용은 무결성을 해칠수 있다.

처음 보는 내용이라 이해가 되질 않는다 추후에 학습후 수정해야겠다.

접근제어자 (Access Modifier)

  1. public
  2. protected
  3. default
  4. private
  • 접근 허용 범위
    public > protected > default > private
    (public 이 가장 많은 접근을 허용)

    1. public
      접근 제어자가 public 으로 선언이 되어 있다면, 선언된 변수나 메서드의 경우 다른 어떤 클래스에서도 해당 변수나 메서드에 접근이 가능
    1. protected
      protected 접근 제어자를 사용하여 변수나 메서드를 선언했다면, 해당 변수나 메서드의 경우 같은 패키지 내의 클래스나 해당 클래스를 상속받은 다른 외부 패키지의 클래스에서 접근이 가능
      (같은 패키지내의 다른 클래스에 접근 가능)
      (다른 패키지의 클래스에서 인스턴스생성 후 변수에 접근 불가능)
    1. default
      변수나 메서드에 접근 제어자를 별도로 선언하지 않는다면, 해당 변수나 메서드는 default 접근 제어자가 됩니다.
      default 접근 제어자는 해당 패키지내에서만 접근이 가능
    1. private
      private 접근 제어자로 선언한 변수나 메서드는 해당 클래스 내에서만 접근이 가능
      외부로 공개되지 않으며 객체지향에서 은닉화를 가능하게함
      해당 변수나 메서드에 직접 접근은 불가능하며 해당 클래스의 public 메서드를 통해서만 접근할수있음

흠..느낌은 알겠지만 잘 모르겠다. 읽고 또 읽자 알 때 까지..

제네릭 generic

선언

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());
		
	}

}

제네릭의 특징

  1. 제네릭은 클래스 또는 메서드에 사용 할 수 있습니다. 클래스 이름 뒤에 <> 문법 안에 들어가야 할 타입 변수를 지정합니다.

  2. 타입변수의 이름을 T로 사용하는 이유는 일종의 컨벤션입니다.

  3. 제네릭의 제한

  • 객체의 static 멤버에 사용 할 수 없습니다.
  • 제네릭 배열을 생성 할 수 없습니다.

4 다수의 타입변수를 사용 할 수 있습니다.

public class Generic<T, U, E> {
    public E multiTypeMethod(T t, U u) { ... }
}

Optional

  • Optional<T>

  • 자바로 프로그래밍 하다보면 정의되지 않은 객체에 대해 NULL값을 고려하게 되는 경우가 발생한다. 안정적인 실행을 위해서는 NULL값을 처리해 NPE(NullPointerException)가 발생하지 않게 체크해야 한다.
    이러한 상황을 위해 Java8에서는 Optional 클래스를 도입하여 NPE를 방지할 수 있도록 도와준다. Optional는 NULL이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE가 발생하지 않도록 도와준다.

  • Optional은 데이터를 Wrapping하고 다시 풀고, NULL일 경우에는 대체 함수를 호출하는 등의 오버헤드가 있으므로 성능이 저하될 수 있다.

  • orElse : Optional 안의 값이 NULL이든 아니든 항상 호출.

  • orElseGet : Optional 안의 값이 'NULL일 경우에만' 호출.

  • 즉, "Optional은 메서드의 결과가 NULL이 될 수 있으며, 클라이언트가 이 상황을 처리해야 할 때 사용하는 것이 효율적이다."

profile
새내기개발자 성장기록

0개의 댓글