캡슐화(Encapsulation)

김수민·2023년 3월 11일
0

백엔드 부트캠프

목록 보기
14/52

캡슐화

  • 캡슐화: 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것
  • 목적
    1. 데이터 보호의 목적
    1. 내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출을 방지
  • 장점: 정보 은닉(data hiding)
    - 외부로부터 객체의 속성과 기능이 함부러 변경되지 못하게 막고, 데이터가 변경되더라도 다른 객체에 영향을 주지 않기에 독립성을 확보할 수 있음

패키지

  • 패키지(package): 특정한 목적을 공유하는 클래스와 인터페이스의 묶음
    - 클래스들을 그룹 단위로 묶어 효과적으로 관리하기 위한 목적
  • 패키지는 물리적인 하나의 디렉토리(directory)이고, 하나의 패키지에 속한 클래스나 인터페이스 파일은 모두 해당 패키지에 속해있음
    - 디렉토리는 하나의 계층구조를 가지고 있는데, 계층 구조 간 구분은 점(.)으로 표현됨
  • 패키지가 있는 경우 소스 코드의 첫 번째 줄에 반드시 package 패키지명이 표시되어야 하고, 만약 패키지 선언이 없으면 이름없는 패키지에 속하게 됨
  • 클래스의 충돌을 방지해주는 기능: 같은 이름의 클래스를 가지고 있더라도 각각 다른 패키지에 소속되어 있다면 이름명으로 인한 충돌이 발생하지 않음

import 문

  • import 문: 다른 패키지 내의 클래스를 사용하기 위해 사용, 일반적으로 패키지 구문과 클래스문 사이에 작성
import 패키지명.클래스명; 또는 import 패키지명.*;

접근 제어자

제어자(Modifier)

  • 제어자: 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드를 의미
    -접근 제어자: public, protected, (default), private
    -기타 제어자: static, final, abstract, native, trasient, synchronized 등
  • 형용사의 역할, 하나의 대상에서 여러 제어자를 사용할 수 있음
  • 각 대상에 대해서 접근 제어자는 한번만 사용할 수 있음

접근 제어자(Access Modifier)

접근 제어자접근 제한 범위
private동일 클래스에서만 접근 가능
default동일 패키지 내에서만 접근 가능
protected동일 패키지+다른 패키지의 하위 클래스에서 접근 가능
public접근 제한 없음
  • public(접근 제한 없음) > protected(동일 패키지 + 하위 클래스) > default(동일 패키지) > private(동일 클래스)
  • default: 아무런 접근 제어자를 붙이지 않는 경우 기본적인 설정

getter와 setter 메서드

public class GetterSetterTest {
    public static void main(String[] args) {
        Worker w = new Worker();
        w.setName("김코딩");
        w.setAge(30);
        w.setId(5);

        String name = w.getName();
        System.out.println("근로자의 이름은 " + name);
        int age = w.getAge();
        System.out.println("근로자의 나이는 " + age);
        int id = w.getId();
        System.out.println("근로자의 ID는 " + id);
    }
}

class Worker {
    private String name; // 변수의 은닉화. 외부로부터 접근 불가
    private int age;
    private int id;

    public String getName() { // 멤버변수의 값 
        return name;
    }

    public void setName(String name) { // 멤버변수의 값 변경
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age < 1) return;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

// 출력값
근로자의 이름은 김코딩
근로자의 나이는 30
근로자의 ID는 5
  • setter 메서드는 외부에서 메서드에 접근하여 조건이 맞을 경우 데이터 값을 변경 가능하게 해주고, 일반적으로 메서드명에 set-을 붙여서 정의
  • getter 메서드는 설정한 변수 값을 읽어오는데 사용하는 메서드
  • setter와 getter 메서드를 활용하면 데이터를 효과적으로 보호하면서도 의도하는 값으로 값ㅇ르 변경하여 캡슐화를 보다 효과적으로 달성할 수 있음

0개의 댓글