inflearn

[인프런] 김영한의 자바 기본 강의 섹션6. 접근 제어자 (240109)

hail2y 2024. 1. 10. 04:51

1/9 섹션6 접근 제어자 필기

  • private 접근 제어자는 모든 외부 호출을 막고, 해당 클래스 내부에서만 호출할 수 있다.

데이터를 잘 통제하는 게 중요하다.

좋은 프로그램은 무한한 자유를 주어지게 하는 것이 아니라 적절한 제약을 주는 프로그램이다.

 

  • private: 같은 클래스 안에서만 사용한다.
  • default(package-private): 같은 패키지 안에서만 사용한다.
  • protected: 같은 패키지 안에서 사용하거나 상속관계를 호출할 때만 사용한다.
  • public: 모든 외부 호출을 허용한다. 
  • 접근 제어자는 클래스, 필드, 생성자, 메서드에서만 사용하고 지역변수에는 사용하지 않는다. 
    (어차피 생존 범위가 메서드로 제한되어 있다.)

 

  • 클래스 레벨의 접근 제어자는 public, default만 사용할 수 있다. 
  • public 클래스면 반드시 파일명과 이름이 같아야 한다.
  • 하나의 자바파일에 여러 클래스를 넣을 수 있지만 하나의 public 클래스만 등장할 수 있다. default는 여러 개 가능하다.

캡슐화

더보기

캡슐화는 데이터와 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 직접적인 변경을 방지하거나 제한할 수 있다. 즉, 속성과 기능을 하나로 묶고 꼭 필요한 기능만 노출하되, 나머지는 모두 내부로 숨긴다

데이터를 외부에서 함부로 접근하면 클래스 안에서 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다. 

그렇게 되면 모든 안전망을 다 빠져나가면서 캡슐화가 깨진다. (ex) Speaker volume 200으로 높이기)

객체의 데이터는 객체가 제공하는 기능인 메서드를 통해 접근해야 한다. 대부분의 객체지향 언어에서는, 데이터들은 private으로 막아두고 꼭 필요한 기능만을 열어둔다. 데이터는 모두 숨기고 기능은 꼭 필요한 기능만 노출하는 것이 좋은 캡슐화다. 

 

치트키 등장! (잊어버린 단축키도 살포시..)

  • generate 단축키 alt insert
  • 변수명 입력할 때 ctrl alt v
  • 아직 만들지 않은 메서드에 alt enter를 치면 클래스 안에 알아서 생성해 준다. 

public으로 외부에서 갖다 쓰라고 열어둔 경우, 사용하는 개발자 입장에서는 메서드나 멤버변수를 직접 사용하라고 하는 경우인지 매우 헷갈리게 된다. -- 이 관점이 새로웠고 신기했다.

 

따라서, 접근 제어자와 캡슐화를 통해 데이터를 안전하게 보호한다. 사용하는 개발자 입장에서는 해당 기능을 사용하는 복잡도를 낮추게 된다. 

 

if문 로직 작성 팁!

 public void addItem(Item item) {
 	if (itemCount >= items.length) {
		System.out.println("장바구니가 가득 찼습니다.");
 		return;
 	}
 	items[itemCount] = item;
 	itemCount++;
 }

 

위처럼 검증로직 후에 실행로직을 쓰는 게 더 깔끔해 보이는 코드일 수 있다. 단순히 if-else문을 쓰는 것보다.

 

그리고 자꾸 잊어버리는 캡슐화, 객체지향 프로그래밍의 팁!

본인 데이터는 자기 자신의 메서드에서 계산하는 게 제일 좋다. 나중에 수정, 변경할 때 용이하기 때문이다.

 

--끝--