접근지정자
- public : 모든 클래스에서 접근 가능.
- 디폴트 : 같은 패키지에서만 접근 가능.
- private : 같은 클래스에서만 접근 가능.
- protected : 같은 패키지와 자식 클래스에서의 접근만 가능.
연습하기1
패키지, 클래스에 따른 접근지정자 사용법.
=> public, 디폴트, private 접근 지정자를 사용하여 필드와 메소드 선언.
=> private는 같은 클래스에서만 접근이 가능하기 때문에 위의 코드처럼 다른 클래스에서는 접근 불가능.
=> 디폴트는 같은 패키지 내에서만 접근이 가능하기 때문에 위의 코드처럼 다른 패키지에서는 접근 불가능.
연습하기2
A, B, C 클래스를 선언하여 각각의 클래스에 멤버 변수를 선언하고, 메인 메소드에서 멤버 변수에 접근하여 값 넣기.
package test;
class A{ //클래스A
//멤버 변수
String nameA;
}
class B{ //클래스B
//멤버 변수
String nameB;
}
class C{ //클래스C
//멤버 변수
String nameC;
}
public class Test {
public static void main(String[] args) {
A a = new A(); //A클래스 객체 생성
B b = new B(); //B클래스 객체 생성
C c = new C(); //C클래스 객체 생성
a.nameA = "A"; //a 객체의 nameA 변수에 접근하여 "A"대입.
String name1 = a.nameA; //위의 변수를 name1변수에 대입.
System.out.println(name1); //출력
b.nameB = "B"; //b 객체의 nameB 변수에 접근하여 "B"대입.
String name2 = b.nameB;
System.out.println(name2);
c.nameC = "C"; //c 객체의 nameC 변수에 접근하여 "C"대입.
String name3 = c.nameC;
System.out.println(name3);
}
}
->오류 발생
만약 클래스 B에서 멤버 변수의 접근 지정자가 private라면 같은 클래스가 아니면 클래스 B의 멤버 변수 사용 불가.
private String nameB;
메인 메소드에서 클래스 B의 멤버 변수 사용 시 오류 발생.
-> 오류 해결 하기
1. 클래스 B에 setter, getter 메소드를 선언.
class B{ //클래스B
//멤버 변수
private String nameB;
public void setB(String name) { //setter 메소드
this.nameB = name;
}
public String getB() { //getter 메소드, 읽기만 가능
return nameB;
}
}
2. 메인 메소드에서 b.setB( );를 통해 클래스 B의 setB 메소드에 접근하고, 값을 입력하여 출력하기.
b.setB("B"); //B클래스의 setB메소드에 접근하여 "B"를 넣어줌
String nameB = b.getB(); //그 값을 새로운 변수에 대입
System.out.println(nameB); //출력
3. 오류 해결 완료
package test;
class A{ //클래스A
//멤버 변수
String nameA;
}
class B{ //클래스B
//멤버 변수
private String nameB;
public void setB(String name) { //setter
this.nameB = name;
}
public String getB() { //getter
return nameB;
}
}
class C{ //클래스C
//멤버 변수
String nameC;
}
public class Test {
public static void main(String[] args) {
A a = new A(); //A클래스 객체 생성
B b = new B(); //B클래스 객체 생성
C c = new C(); //C클래스 객체 생성
a.nameA = "A"; //a 객체의 nameA 변수에 접근하여 "A"대입.
String name1 = a.nameA; //위의 변수를 name1변수에 대입.
System.out.println(name1); //출력
b.setB("B"); //B클래스의 setB메소드에 접근하여 "B"를 넣어줌
String nameB = b.getB(); //그 값을 새로운 변수에 대입
System.out.println(nameB); //출력
c.nameC = "C"; //c 객체의 nameC 변수에 접근하여 "C"대입.
String name3 = c.nameC;
System.out.println(name3);
}
}
다음 글에서는 클래스와 객체 생성에 대해 조금 더 연습해보겠습니다.
감사합니다!
2021.07.05
'JAVA' 카테고리의 다른 글
static멤버 , non - static 멤버 (0) | 2021.07.07 |
---|---|
힙/스택 영역 표현 (1) (0) | 2021.07.06 |
클래스와 객체생성 및 활용 (0) | 2021.07.05 |
객체 지향 언어(Object-oriented programming, OOP)/클래스와 객체 (0) | 2021.07.03 |
flag 변수 (0) | 2021.07.02 |