본문 바로가기

개발/Java

[Java] 자바 - 캡슐화(Encapsulation)

< 캡슐화 (Encapsulation) >

 

- 직접적으로 접근해서 값을 대입하고 조회할 경우, 보안 문제 발생 가능

  (외부로부터 직접 접근이 가능하기 때문에 값이 변질되거나 조회를 막지 못하는 문제 발생)

- 객체지향의 설계 원칙 중 하나인 "정보 은닉"을 위한 기술

 

- 정보보안의 3요소 : (기밀성, 무결성), 가용성

                                    '캡슐화'와 관련

 

 

[ 작업 방법 ]

1단계. 값을 숨김 : 접근제한자를 public 대신 private으로 바꿔준다.

2단계. 간접적으로 값을 처리할 수 있는 메소드를 만든다. (getter/setter)

 

 

< setter 메소드 >

 

- 데이터를 기록 및 수정하는 기능의 메소드

- '필드의 자료형'과 '매개변수의 자료형'이 동일한지 확인해야 함!

 

[ 규칙 ]

1. setter 메소드는 접근 가능하도록 만들어야 하기 때문에 public 접근제한자를 이용

2. 'set필드명'으로 이름을 짓되, 낙타봉표기법(camelCase) 사용

     ex) setName() , setAge(), setGender()

3. 모든 필드에 대해 전부 다 필수로 작성

 

 

< getter 메소드 >

 

- 데이터를 반환해주는 기능의 메소드

- '메소드의 반환형'과 '반환값의 반환형'이 동일한지 확인해야함!

 

[ 규칙 ]

1. getter 메소드는 접근제한자 public을 이용

2. 'get필드명'으로 이름을 짓되, 낙타봉표기법(camelCase) 사용

     ex) getName() , getAge(), getGender()

3. 모든 필드에 대해 전부 다 필수로 작성

 

public class Student {

    // [ 필드부 ]
    private String name;
    private char gender;
    private int age;

    // [ setter ]
    // 이름을 기록 및 수정할 수 있는 메소드
    public void setName(String name) {
        this.name = name; // this : heap영역에 생긴 공간의 주소값에 접근하도록 해줌
        // 특정 영역 안에서는 해당 영역 안의 지역변수가 우선함.
        // this.를 붙이지 않으면 매개변수 name으로 인식함
    }
    // 나이를 기록 및 수정할 수 있는 메소드
    public void setAge(int age) {
        if (age < 0) { // 내부에 조건문 작성 가능
            System.out.println("잘못된 값입니다. ");
        } else {
            this.age = age;			
        }
    }
    // 성별을 기록 및 수정할 수 있는 메소드
    public void setGender(char gender) { // 매개변수명은 보편적으로 같은 이름으로 지어줌
        this.gender = gender;
    }

    // [ getter ]
    // 이름을 반환해주는 메소드
    public String getName() {
        return name;	
    }
    // 나이를 반환해주는 메소드
    public int getAge() {
        return age;
    }
    // 성별을 반환해주는 메소드
    public char getGender() {
        return gender;
    }


}