티스토리 뷰
접근 지시제어자(private, protected, default, public) 를 배우고 데이터 보안(정보은닉)에 대해 알게 되었으니,
캡슐화에 대한 공부를 안할 수 가 없습니다.
캡슐화는 객체지향 기반의 클래스 설계에서 가장 기본이면서도 가장 중요한 원칙들 입니다.
가장 기본적인 실습 예제를 보면서 공부하도록 하겠습니다.
캡슐화 예제를 보여주는 계산기 클래스
public class Calculator { // 인스턴스 변수가 보이지 않게 정보를 은닉 private int num1; private int num2; private int result; public void setNum1(int num1) { this.num1 = num1; } public void setNum2(int num2) { this.num2 = num2; } public int getResult() { return this.result; } // 사용자가 알 필요는 없지만 반드시 실행 해야 할 메소드 private void specialAlgorithm() { System.out.println("특수 알고리즘 실행~~~~"); } // 캡슐화의 예제 public void runAdd() { specialAlgorithm(); result = num1 + num2; } }
계산기 클래스를 사용하는 메인 클래스
public class ExampleEncapsulation{ public static void main(String[] args) { Calculator calc = new Calculator(); calc.setNum1(10); // 사용자가 첫 번째 숫자 입력 calc.setNum2(20); // 사용자가 두 번째 숫자 입력 // 특수 알고리즘 실행 // calc.specialAlgorithm(); calc.runAdd(); int addResult = calc.getResult(); System.out.println("덧셈 결과 : " + addResult); } }
캡슐화는 일관되게 적용할 수 있는 단순한 개념이 아니고,
구현하는 프로그램의 성격과 특성에 따라서 적용하는 범위가 달라진다.
즉, 정답이라는 것이 딱히 없는 개념이다.
실습을 통해 공부하겠습니다.
원 넓이를 구하는 메소드를 캡슐화
public class Circle { private double r; private double area; private static final double PI = 3.14; public void setR(double r) { this.r = r; } public void showInfo() { makeArea(); System.out.println("원 반지름 : " + this.r); System.out.println("원 넓이 : " + this.area); } private void makeArea() { this.area = this.r * this.r * PI; } }
사각형 넓이를 구하는 메소드를 캡슐화
public class Square { private int heigth; private int width; private int area; public void setHeigth(int heigth) { this.heigth = heigth; } public void setWidth(int width) { this.width = width; } public void showInfo() { makeArea(); System.out.println("사각형 가로길이 : " + this.width); System.out.println("사각형 세로길이 : " + this.heigth); System.out.println("사각형 넓이길이 : " + this.area); } private void makeArea() { area = width * heigth; } }
캡슐화된 클래스 사용하는 메인 클래스
public class ExampleEncapsulation2{ public static void main(String[] args) { Square square = new Square(); Circle circle = new Circle(); square.setWidth(10); square.setHeigth(20); square.showInfo(); circle.setR(10); circle.showInfo(); } }
반응형
LIST
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 생성자 (0) | 2017.04.22 |
---|---|
자바 ! static 변수와 메소드 (정적변수, 메소드) (0) | 2017.04.22 |
자바 ! 접근 지시 제어자 (private, default, protected, public) (0) | 2017.04.20 |
자바 ! 객체지향 프로그래밍 (0) | 2017.04.18 |
자바 ! 반복문 (for, while, do~while) (0) | 2017.04.17 |
댓글