[JAVA] 접근제어자


접근 제어자 : 변수, 메소드 등의 앞에 붙여 접근을 제한함

private > default > protect > public  public으로 갈수록 접근의 제한이 작아짐.

private - 외부 class에서 접근 불가. 같은 class 내에서는 접근 가능
                     ==> 정보 은닉/캡슐화 : 해당 하는 변수를 private 로묶어 set, get 메소드를 통해 우회적으로 접근하여
                                               그 값을 변경하는 기술, 데이터를 안정적으로 운용가능
defautl - 접근 관련 modifier를 지정하지 않은 경우이다. 이는 동일 패키지에 속하는 클래스만 접근할 수 있다.
protect - 동일 패키지와 동일 패키지에 포함되지는 않지만, 하위클래스 관계에 있는 클래스에 접근할수 있다.
public - 모든 클래스에 의해 접근할 수 있다. 접근 제약이 없다.


생성자를 쓰는이유 - 일반 변수는 바로 초기화 할수 있지만, 멤버변수나 객체변수는 그럴수 없기때문에 사용한다.


ex
정보은닉

package oop1;

public class Member {

     private String name;
     private int age;

     public Member(){}

     public Member(String name, int age){
           super();
           this.name = name;
           this.age = age;
     }

     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;
     }
}


package oop1;

public class MemberMain {

     public static void main(String[] args) {
           Member m = new Member("홍길동", 20);

           m.setName("황준홍");
           m.setAge(10);

           System.out.println("이름 : "+m.getName());
           System.out.println("나이 : "+m.getAge());

     }

}






ex

package phone;

public class PhoneInfo {
     // 상태(name, phoneNo, birth) - private
     // 기능 (show) - 출력
     private String name;
     private String phoneNo;
     private String birth;

     public PhoneInfo() {
     }

     public String getName() {
           return name;
     }

     public void setName(String name) {
           this.name = name;
     }

     public String getPhoneNo() {
           return phoneNo;
     }

     public void setPhoneNo(String phoneNo) {
           this.phoneNo = phoneNo;
     }

     public String getBirth() {
           return birth;
     }

     public void setBirth(String birth) {
           this.birth = birth;
     }

     public PhoneInfo(String name, String phoneNo, String birth) {
           this.name = name;
           this.phoneNo = phoneNo;
           this.birth = birth;
     }

     public void PhoneShow() {
           System.out.println("이름 : " + name);
           System.out.println("번호 : " + phoneNo);
           System.out.println("생일 : " + birth);
           System.out.println();
     }
}


package phone;

import java.util.Scanner;

public class Main {

     public static void main(String[] args) {

           Manager mana = new Manager();

           Scanner sc = new Scanner(System.in);

           while (true) {

                System.out.print("1.추가  2.전체출력  3.검색  4.수정 5.삭제 6.종료 : ");
                int num = sc.nextInt();

                switch (num) {
                case 1:
                     mana.addPhoneInfo();
                     break;

                case 2:
                     mana.listPhoneInfo();
                     break;

                case 3:
                     mana.searchPhoneInfo();
                     break;

                case 4:
                     mana.updatePhoneInfo();
                     break;

                case 5:
                     mana.deletePhoneInfo();
                     break;

                case 6:
                     System.out.println("종료");
                     return;
                }
           }
     }
}


package phone;

import java.util.Scanner;

public class Manager {
     // PhoneInfo 배열 생성
     int count = 0;
     PhoneInfo arr[] = new PhoneInfo[2];
     Scanner sc = new Scanner(System.in);

     public Manager() {
     }

     public void addPhoneInfo() {
           // 배열에 PhoneInfo 객체를 생성에서 추가
           System.out.print("이름 : ");
           String name = sc.nextLine();
           System.out.print("번호 : ");
           String phoneNo = sc.nextLine();
           System.out.print("생일 : ");
           String birth = sc.nextLine();
           arr[count++] = new PhoneInfo(name, phoneNo, birth);

     }

     public void listPhoneInfo() {
           // 전체 전화번호 목록 출력
           for (int i = 0; i < count; i++) {
                arr[i].PhoneShow();
           }
     }

     public void searchPhoneInfo() {
           // 이름 => PhoneInfo객체 찾는 역할
           String str = sc.nextLine();

           for (int i = 0; i < count; i++) {
                if (arr[i].getName().equals(str)) {
                     arr[i].PhoneShow();
                     break;
                } else {
                     System.out.println("일치하는 이름이 없습니다. ");
                }
           }
     }

     public void updatePhoneInfo() {
           System.out.println("번호를 수정할 대상의 이름을 입력하세요 : ");
           String str = sc.nextLine();
           int index = -1;

           for (int i = 0; i < count; i++) {
                if (arr[i].getName().equals(str)) {
                     index = i;
                     System.out.println("전화번호 : ");
                     String phoneNo = sc.nextLine();
                     arr[i].setPhoneNo(phoneNo);
                }
           }
           if (index == -1) {
                System.out.println("대상을 찾을 수 없습니다. ");
           }
     }

     public void deletePhoneInfo() {
           Scanner sc = new Scanner(System.in);

           System.out.println("삭제 대상 입력 : ");
           String str = sc.nextLine();

           for (int i = 0; i < count; i++) {
                if (arr[i].getName().equals(str)) {
                     arr[i] = arr[i + 1];
                     arr[count] = null;
                     count--;
                     System.out.println("해당 데이터가 삭제되었습니다. ");
                } else {
                     System.out.println("해당 데이터가 없습니다. ");
                }
           }
     }
}

댓글