[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("해당 데이터가 없습니다. ");
                    }
               }
         }
    }

    댓글