코딜기

[Java] 캡슐화 (Encapsulation) 본문

Language/Java

[Java] 캡슐화 (Encapsulation)

코딜기 2024. 8. 27. 11:48
반응형

캡슐화(Encapsulation)란?

  • 캡슐화란 객체의 상태와 동작을 하나의 단위로 묶어서 구현하는 것을 의미합니다.
  • 즉, 하나의 목적을 이루기 위해 관련 있는 모든 것들을 하나의 캡슐에 담아 두는 것을 의미합니다.

캡슐화를 고려하지 않았을 때의 비효율성

  • 차에 시동을 거는 과정을 각각의 public 메서드로 정의를 했습니다.
public class Car {
    // 시동 거는 기능
    public void engineStart() {
        System.out.println("시동 버튼을 눌렀습니다.");
        System.out.println("시동이 걸렸습니다.");
    }

    // 엔진오일이 주입되는 기능
    public void injectOil() {
        System.out.println("엔진 오일이 순환합니다.");
    }
    
    // 엔진에 연료가 주입되는 기능
    public void injectGasoline() {
        System.out.println("연료가 엔진에 주입됩니다.");
    }

    // 실린더가 움직이는 기능
    public void moveCylinder() {
        System.out.println("실린더가 움직입니다.");
    }
}
  • main 메서드를 통해 시동을 거는 과정을 순서대로 호출합니다.
public class Main {
    public static void main(String[] args) {
    	// 차에 시동걸기
        engineStart();
        injectOil();
        injectGasoline();
        moveCylinder();
    }
}
  • 차에 시동이 걸리기 위해 오일이 순환하고, 연료가 주입되고, 실린더가 움직이는 순서가 중요한 로직이고, 모든 과정이 정상적으로 진행되어야 합니다.
  • 하지만, 메서드는 public으로 선언이 되었기 때문에 언제든지, 누구나 수정을 할 수 있기 때문에 불안정합니다.
  • 따라서, 캡슐화 개념을 사용해서 각각의 메서드를 private로 선언을 하고, 이를 포함하는 대표 메서드를 로직에 맞게 public으로 선언해 줍니다.

캡슐화 사용

  • engineStart() 메서드 내에 로직 순서를 지켜서 private로 선언된 메서드들을 캡슐화하였습니다.
  • 캡슐화를 통해 사용자는 좀 더 간결한 문법으로 객체를 동작시킬 수 있는 편의성이 생깁니다.
  • 또한, 내부 로직이 변경되더라도 외부 코드에는 영향을 미치지 않도록 설계되기 때문에 유지 보수의 편의성 또한 증가합니다.
  • 아무나 접근을 할 수 없기 때문에 불필요한 수정이 발생하지 않습니다.
public class Car {
    // 시동 거는 기능
    public void engineStart() {
        System.out.println("시동버튼을 눌렀습니다.");
        injectOil();
        injectGasoline();
        moveCylinder();
        System.out.println("시동이 걸렸습니다.");
    }

    // 엔진오일이 주입되는 기능
    private void injectOil() {
        System.out.println("엔진 오일이 순환합니다.");
    }
    
    // 엔진에 연료가 주입되는 기능
    private void injectGasoline() {
        System.out.println("연료가 엔진에 주입됩니다.");
    }

    // 실린더가 움직이는 기능
    private void moveCylinder() {
        System.out.println("실린더가 움직입니다.");
    }
}
  • 캡슐화를 한 engineStart()를 메인 메서드에서 호출합니다.
public class Main {
    public static void main(String[] args) {
    	// 차에 시동걸기
        engineStart();
    }
}
  • engineStart()만 호출하면, 시동이 걸리기까지의 과정들이 순차적으로 실행됩니다.
반응형
Comments