ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Encapsulation 캡슐화 & 접근 제어자 & set(), get()
    JAVA/JAVA 2020. 1. 21. 17:25

    Encapsulation 캡슐화 

    데이터를 보호하고 은닉하는 것(=감추는 것)

    올바른 값만 저장하는 방법을 구축


    Access Modifier 접근 제어자

    접근 제어자 설명
    public 외부 클래스 어디에서나 접근 가능
    protected 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고
    그 외 클래스에서는 접근 불가
    아무것도 없는 경우 dafault이며 같은 패키지 내부에서만 접근 가능
    private 같은 클래스 내부에서만 접근 가능

    형식

    접근 제어자 자료형 변수 / 메소드 ;

    사용례_멤버 변수 선언

    private String name;    // 차 이름
    private int output;     // 배기량
    private int year;       // 년식

    Set(), Get() Method

    private 처리된 멤버변수에 접근해서 데이터를 저장, 출력하는 메소드

    Setter, Getter 라고 부르기도 함


    Set() Method

    데이터를 멤버변수에 저장하는 메소드, 매개변수 O, 반환값 X

    제어문을 사용해서 저장할 데이터의 범위를 지정
    → 올바른 값만 저장될 수 있도록 함

    public void set멤버변수명(자료형 매개변수명){
        멤버변수 = 매개변수 ;
    };

    ※ 외부에서 접근이 가능해야하기 때문에 public 작성, 반환값이 없기 때문에 void 작성


    Get() Method

    저장된 멤버변수의 값을 불러올 때 사용하는 메소드, 매개변수 X, 반환값 O

    public 자료형 get멤버변수명(){
        return 멤버변수명;
    }

    ※ get() 메소드 반환값의 자료형과 멤버변수의 자료형이 같아야함


    캡슐화 순서

    1. 멤버 변수 앞에 private 작성
      → 외부로부터의 데이터 저장을 차단
    2. set() 메소드 정의 : 멤버 변수에 값을 저장, 수정할 수 있도록 함
    3. get() 메소드 정의 : 멤버 변수의 값을 출력할 수 있도록 함
    4. 메소드 내에 제어문을 사용해서 정확한 값만 입력되도록 코드 작성

    사용례_set(), get() Method 정의

    // =======Setter Method=======
    public void setName(String n) {    name = n; }
    public void setOutput(int o) {
            if (o <= 0 || o > 1500) {
                System.out.println("정확한 배기량 값을 입력해주세요!!");
                output = 1000; /* 기본값 설정, 
                                설정하지 않는 경우에 문자열은 null, 정수,실수형은 0이 저장됨 */
                return;     // 반환값이 없는 경우 return은 탈출문으로 작동함
            }
            output = o;
        }
    public void setYear(int y) {
            if (y < 0 || y > 2020) {
                System.out.println("해당 값은 연도로 지정할 수 없습니다!!");
                year = 2020;
            } else {
            year = y;
               }
        }
    // =======Getter Method=======
    public String getName() { return name; }
    public int getOutput() { return output; }
    public int getYear() { return year; }

    사용례_set(), get() Method 사용

    // Setter Method로 멤버 변수에 데이터 저장
    morning.setName("모닝");
    morning.setOutput(1800);    // 정확한 배기량 값을 입력해주세요!!
    morning.setYear(2020);
    
    // Getter Method로 멤버 변수에 저장된 값 출력
    System.out.println("차 이름: " + morning.getName());
    System.out.println("배기량: " + morning.getOutput());
    System.out.println("연식" + morning.getYear());
    /*
    차 이름: 모닝
    배기량: 1000
    연식: 2020
    */

    ※ 웹페이지 상에서 JavaScript로 입력값을 제어하면 Java에서는 굳이 제어할 필요가 없어짐


    사용례_Class 내의 다른 Method 입력값 제어

    Method에 제어문으로 여러 가지 조건을 추가해서 정확한 값만 입력되도록 함

    void speedUp(int speed) {        // 매개변수 O 반환값X ->속도를 입력받아서 내부적으로 계산,저장
            if (sidong == true) {    // 시동이 켜져있는 지 확인하는 조건, (sidong)으로 작성 가능
                if (speed >= 0) {    // speed에 0이 아닌 양수 값이 입력됐는 지 확인
                    if (current_speed + speed > 170) {
                        // 현재속도와 추가 속도의 합이 170이 넘는 지 확인하는 조건
                        System.out.println("더 이상 속도를 증가시킬 수 없습니다.");
                        current_speed = 100;
                        // 기본 속도를 100으로 조정
                    } else {
                        // 현재속도와 추가 속도의 합이 170이 되지 않을 때 실행
                        current_speed += speed;
                        System.out.println(speed + "km만큼 속도가 증가되었습니다.");
                        System.out.println("현재 속도: " + current_speed);
                    }
                } else {
                    // speed에 음수가 입력되었을 때 실행
                    System.out.println("감속은 불가합니다.");
                }
            } else {
                // 시동이 꺼져있을 때(sidong 값이 false 일 때) 실행
                System.out.println("시동을 먼저 걸어주세요!!");
            }
        }
    }

    OOP(객체 지향 프로그래밍)의 특징 중 하나인 캡슐화에 대해 알아보았습니다.

    예제에서는 클래스 내의 멤버 변수를 캡슐화함으로써 외부로부터의 불필요한 접근을 방지하고
    원하지 않는 데이터가 저장되지 않도록 set() 메소드와 제어문을 활용했습니다.

    데이터의 보안성을 높이고 정확한 값만 입력받도록 하기 위해서는 캡슐화에 대해 꼭 알 필요가 있겠습니다.

    댓글

Designed by Tistory.