오늘 프로젝트 리팩토링을 하면서 여러 개의 패키지로 클래스들을 분리했는데, 일부 코드에서 오류가 발생했다.
컨트롤러 역활을 하는 MahjongGame과 User클래스의 패키지를 분리 후, MahjongGame에서 User를 import 해주었다.
분명 User를 import 해왔는데 오류가 발생하였다ㅠ.
import view.InputView;
import model.User;
import model.Deck;
import model.Card;
import java.util.*;
public class MahjongGame {
Deck deck;
User user1,user2, user3, user4;
InputView inputView = new InputView();
MahjongGame (){
deck = new Deck();
user1 = setStartGame();
user2 = setStartGame();
user3 = setStartGame();
user4 = setStartGame();
}
//model.User can select cards
MahjongGame(List<Card> cardlist){
deck = new Deck();
user1 = new User(cardlist); //에러 발생
}
그래서 마우스를 올려보니 이런 문장이 나왔다.
'model.User' is not public in 'model'. Cannot be accessed from outside package.
class User { >> public class User 로 변경
//variable
List<Card> myCards;
int count, block;
int[][] cardCounting = new int[4][10];
//TODO Don't use hardcoding!
boolean[] isBlock = new boolean[14];
//Constructor
User(List<Card> list){ >> public User(~) 로 변경
this.myCards =list;
this.count=8;
this.block=0;
for(int i=0;i<3;i++){
Arrays.fill(cardCounting[i],4);
}
Arrays.fill(isBlock,false);
sortCards();
}
아.. 클래스를 public으로 선언해주지 않으면 package 외부에서 import 해도 사용할 수 없구나.
그래서 이참에 접근제어자에 대해서 한번 정리를 해보기로 하였습니다.
접근제어자 왜 있을까?
접근제어자는 클래스, 메서드, 변수 등의 멤버에 대한 접근 권한을 제어하는 키워드로, 이를 사용함으로써 다른 클래스나 패키지에서 해당 멤버에 접근을 제어할 수 있다.
접근제어자 종류
public : 가장 넓은 범위릐 접근 권한을 부여함. 어떤 클래스에서든 public 선언 멤버(클래스 메서드 변수)에 접근이 가능함
private : 해당 클래스 내에서만 접근 가능. 다른 클래스에서 접근 불가능.
default : 접근제어자를 명시하지 않은 경우, 기본적으로 멤버가 가지는 접근제어자로 동일한 패키지 내에서만 접근이 가능
protected: : 같은 패키지 내의 클래스와 해당 멤버를 상속한 하위 클래스에서 접근가능. 다른 패키지에서 접근 불가능.
'어차피 공부는 해야한다. > java' 카테고리의 다른 글
[JAVA] 무지성 배열 생성하지 않기. (0) | 2024.10.24 |
---|---|
[메모리] 자바의 메모리 영역 (0) | 2023.05.22 |
[메모리] 메모리의 단위의 정리하기 (0) | 2023.05.22 |