코딜기
[Java] 캡슐화 (Encapsulation) 본문
반응형
캡슐화(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()만 호출하면, 시동이 걸리기까지의 과정들이 순차적으로 실행됩니다.
반응형
'Language > Java' 카테고리의 다른 글
[Java] final (final 필드, final 메서드) (0) | 2024.08.27 |
---|---|
[Java] static (static 필드, static 메서드) (0) | 2024.08.27 |
[Java] 정보은닉(Infomation Hiding) (1) | 2024.08.26 |
[Java] 생성자(Constructor) (0) | 2024.08.26 |
[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) (0) | 2024.08.26 |
Comments