[Java] 클래스 : 패키지, 접근제한

Local Gaji·2023년 8월 15일

이것이 자바다

목록 보기
5/18

🎈 패키지

package com.mycompany;

public class ClassName {
  ...
}

위 코드에서 클래스의 풀네임은 com.mycompany.ClassName 이다.
디렉토리상에서 해당 파일의 위치는 com/mycompany/ClassName.java 가 된다.

컴파일러는 패키지 선언을 보고 디렉토리를 자동으로 생성한다.
패키지 선언은 항상 소스 파일 최상단에 위치해야 한다.


🔰 import

같은 패키지에 있는 클래스는 import 없이 사용이 가능하다.

package com.mycompany;

import com.apple.Cpu;

public class Computer {
  Cpu cpu = new Cpu();
  /* 또는 풀네임 사용 (import 생략 가능) */
  com.apple.Cpu cpu = new com.apple.Cpu();
}

서로 다른 패키지에서 이름이 같은 클래스를 여러개 불러와야 할 경우, 클래스의 풀네임을 사용한다.


🎈 접근 제한자

객체의 필드와 메서드가 외부에 노출되지 않도록 하려면 접근 제한자를 알맞게 변경한다.

접근제한자 class ClassName { ... }
public class ClassName { ... }
class ClassName { ... }
protected class ClassName { ... }
private class ClassName { ... }
  • public : 제한 없음
  • (default) : 같은 패키지에서만 사용 가능 (클래스 자체도)
  • protected : 같은 패키지 또는 자식 객체일때만 필드, 생성자, 메서드 사용 가능
  • private : 객체 내부에서만 필드, 생성자, 메서드 사용 가능

🔰 생성자 접근 제한

생성자가 갖는 접근 제한자에 따라 호출할 수 있는 범위가 달라진다.
생성자는 public , private , (default) 접근 제한을 가질 수 있다.

public class ClassName {
  
  /* 생성자 초기화 */
  ClassName(...) { ... }
  public ClassName(...) { ... }
  private ClassName(...) { ... }
}

public : 모든 패키지에서 객체 생성 가능
(default) : 같은 패키지에서만 객체 생성 가능
private : 클래스 내부에서만 객체 생성 가능


🔰 필드, 메서드 접근 제한

필드와 메서드도 public , private , (default) 접근 제한을 할수 있다.

public : 모든 패키지에서 필드 읽기/변경 가능, 메서드 호출 가능
(default) : 같은 패키지에서만 필드 읽기/변경 가능, 메서드 호출 가능
private : 클래스 내부에서만 필드 읽기/변경 가능, 메서드 호출 가능


🎈 Getter, Setter

🔰 Setter

필드를 외부에서 마음대로 변경할 경우, 값이 이상해질 수 있다.
따라서 메서드로 값의 유효성을 검사한 후 필드를 변경하는 것이 좋다.

public class ClassName {

  private double price;
  
  public void setPrice(int price) {
    if(price < 0) {
      this.price = 0;
      return;
    } else {
      this.price = price;
    }
  }
}

Setter 메서드인 setPrice 는 가격 값의 유효성을 검사한 후, 필드에 값을 저장한다.


🔰 Getter

필드 값을 읽기만 할 때에도 메서드가 필요한 경우가 있다.
예를 들어 price 는 사용되는 곳에 따라 화폐의 단위가 달라질 수 있다.

private double price;

public double getPrice(double currency) {
  double wonPrice = price * currency;
  return wonPrice;
}











0개의 댓글