접근제어자
<접근제어자의 종류>
* 주로 사용하는 것들
public - 모두가 아무데서나 사용가능하다. (패키지 기준으로)
private - 같은 클래스에서만 사용가능.
* 비주류 사용
default(접근제한자를 붙이지 않은 형태) - 같은 클래스, 같은 패키지에서만 접근 가능
protected - 같은 패키지는 접근 가능 다른 패키지의 경우 상속이 없다면 접근 불가능.(super()를 통해서.. )
➰ public/default/private에 대하여

A클래스의 생성자에 위와 같이 public/default/private 생성자를 만들어주었다.

같은 패키지 안에 존재하는 B클래스에서 A의 생성자들을 호출 했을때 public과 default는 문제 없지만 pricate는 자기자신에서만 사용가능하기 때문에 에러가 난다.

다른 패키지 안에 있는 C클래스에서는 public만 가능하고 private는 물론이고 default 또한 에러가 난다.
➰ protected에 대하여

A class에 protected접근제어자를 가진 변수, 생성자, method를 만들어주었다.

같은 패키지 안의 B Class에서는 그냥 사용가능하다.

다른 패키지의 C class에서는 import를 해주어도 사용불가능하고 (default와 같이) A class를 상속한다면 위와 같이 super keyword를 활용하여 사용가능하다.(default와 차이점)
➰ 아래 조건을 따라서 만들어보기
/* 문제1
* 1. 클래스 User를 생성하세요
* 2. 멤버변수 name: String , rrn : int, int age 를 선언후 은닉 처리합니다 (private 지정)
* 3. User 클래스에는 기본생성자, 모든 멤버변수를 초기화 하는 생성자 2개를 생성하세요.
* 4. main에서 User객체를 생성 후
* (홍길동, 20, 123123 )을 저장 하고 값을 확인하세요.
*/
/* 문제2
* 1. 2개의 크기를 갖는 User배열을 선언하세요. (User배열은 User클래스를 저장할 수 있습니다.)
* 2. 두번째 User객체를 생성하세요. ("김길동", 30, rrn값)을 저장.
* 3. User배열에 두 객체를 저장하세요.
* 4. 향상된 포문을 사용해서 *모든변수*를 출력하세요.
* ex) User[] arr = new User[2];
*/
/* 문제 3
* 1. 5개의 크기를 갖는 User배열을 선언하세요.
* 2. 5번회전하는 while 안에서 Scanner객체를 이용하여 name, rrn, age을 입력받으세요
* 3. while문 안에서 User객체를 생성하고, 입력받은 name과 rrn, age을 저장하세요.
* 4. while문 안에서 User객체를 User배열에 저장하세요.
* 5. Arrays.toString(배열명) 을 이용하여 저장되는 값을 확인하세요.
*/
🔆main 클래스
package quiz10;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
User u1 = new User("홍길동", 20, 123123);
System.out.println("<u1 찍어보기 테스트>");
//getter로 가져올수도 있지만 나는 info로 정보를 출력해주는 method사용.
//System.out.println(u1.getName() + u1.getAge() + u1.getRrn());
u1.info();
/* 문제2
* 1. 2개의 크기를 갖는 User배열을 선언하세요. (User배열은 User클래스를 저장할 수 있습니다.)
* 2. 두번째 User객체를 생성하세요. ("김길동", 30, rrn값)을 저장.
* 3. User배열에 두 객체를 저장하세요.
* 4. 향상된 포문을 사용해서 *모든변수*를 출력하세요.
* ex) User[] arr = new User[2];
*/
User u2 = new User("김길동", 30, 123456);
User[] arr = new User[2];
arr[0] = u1;
arr[1] = u2;
int count = 1;
for(User u : arr) {
System.out.println("==============" + count++ + "번째 고객정보================");
u.info();
}
/* 문제 3
* 1. 5개의 크기를 갖는 User배열을 선언하세요.
* 2. 5번회전하는 while 안에서 Scanner객체를 이용하여 name, rrn, age을 입력받으세요
* 3. while문 안에서 User객체를 생성하고, 입력받은 name과 rrn, age을 저장하세요.
* 4. while문 안에서 User객체를 User배열에 저장하세요.
* 5. Arrays.toString(배열명) 을 이용하여 저장되는 값을 확인하세요.
*/
User[] arr_u = new User[5];
int i = 0;
while(i < 5) {
Scanner scan = new Scanner(System.in);
System.out.print("이름 >");
String name = scan.nextLine();
System.out.print("나이 >");
int age = scan.nextInt();
System.out.print("rrn >");
int rrn = scan.nextInt();
User user = new User(name, age, rrn);
arr_u[i] = user;
i++;
}
System.out.print("Arrays.toString 으로 찍어본 값 : ");
System.out.println(Arrays.toString(arr_u));
count = 1;
for(User p_u : arr_u) {
System.out.println("==============" + count++ + "번째 고객정보================");
p_u.info();
}
}
}
🔆User 클래스
package quiz10;
public class User {
/* 문제1
* 1. 클래스 User를 생성하세요
* 2. 멤버변수 name: String , rrn : int, int age 를 선언후 은닉 처리합니다 (private 지정)
* 3. User 클래스에는 기본생성자, 모든 멤버변수를 초기화 하는 생성자 2개를 생성하세요.
* 4. main에서 User객체를 생성 후
* (홍길동, 20, 123123 )을 저장 하고 값을 확인하세요.
*/
private String name;
private int age;
private int rrn;
public User() {
//기본 생성자
}
//생성자2 : 모든 멤버 변수 초기화 하는 생성자
public User(String name, int age, int rrn) {
this.name = name;
this.age = age;
this.rrn = rrn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getRrn() {
return rrn;
}
public void setRrn(int rrn) {
this.rrn = rrn;
}
public void info() {
System.out.println("이름:" + this.name);
System.out.println("나이:" + this.age);
System.out.println("rrn:" + this.rrn);
}
}
객체와 배열
객체 배열을 만들 때, 배열안에는 객체의 주소값이 들어있다.



User 객체가 들어있는 배열을 출력해보면 위와 같이 주소값만 나온다.
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 16-1. 정적제한자 static (0) | 2022.10.13 |
|---|---|
| [JAVA] 15. 다형성 (0) | 2022.10.12 |
| [JAVA] 14-1. super keyword (0) | 2022.10.11 |
| [JAVA] 13-3. this keyword (0) | 2022.10.07 |
| [JAVA] 13-2. method 중복 (Overloading) (0) | 2022.10.07 |