JAVA

접근지정자 / setter, getter 메소드

yujin0517 2021. 7. 5. 12:15

접근지정자

  • public : 모든 클래스에서 접근 가능.
  • 디폴트 : 같은 패키지에서만 접근 가능.
  • private : 같은 클래스에서만 접근 가능.
  • protected : 같은 패키지와 자식 클래스에서의 접근만 가능.

접근지정자 집합으로 표현

연습하기1 

패키지, 클래스에 따른 접근지정자 사용법.

ch01 패키지->JavaTest 클래스에 필드와 메소드 선언

=> public, 디폴트, private 접근 지정자를 사용하여 필드와 메소드 선언.

ch01 패키지 -> JavaTest2 클래스 (다른 클래스) 

=> private는 같은 클래스에서만 접근이 가능하기 때문에 위의 코드처럼 다른 클래스에서는 접근 불가능.

ch02 패키지 -> JavaTest3 클래스 (다른 패키지, 다른 클래스)

=> 디폴트는 같은 패키지 내에서만 접근이 가능하기 때문에 위의 코드처럼 다른 패키지에서는 접근 불가능. 

 

연습하기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의 멤버 변수 사용 시 오류 발생.

private접근 지정자 사용시 오류 발생

 

-> 오류 해결 하기 

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