728x90
캡슐화(Encapsulation)는 캡슐안에 어떤 가루약이 들어 있는지 은닉된 것처럼 코드를 은닉하는 것을 말합니다.
예를 들어 우리가 지금까지 사용하는 출력 명령어 System.out.println();의 경우 해당 메소드를 계속해서 사용하고는 있지만 해당 메소드의 코드는 알지 못합니다.
해당 메소드의 코드는 캡슐화되어 코드가 은닉되었기 때문입니다.
이런 점으로 캡슐화는 정보 은닉이 가능하다는 장점을 가지고 있습니다.
캡슐화는 변수와 메소드를 하나의 추상화된 클래스로 묶는 과정으로 캡슐화를 이용해서 변수와 메소드가 독립적으로 동작되지 않도록 만듭니다.
캡슐 속 객체는 데이터와 메소드를 포함하고 있으므로 따로 분리할 수는 없습니다.
인터페이스를 이용한 도형의 넓이를 구하는 코드
1. Area.java
public interface Area {
//static final -> 상수
//변수는 "상수화"
//인터페이스에 변수를 만들면 final안써도 자동으로 상수가 됨
String PRINT = "넓이 : ";
public void print();
public void make();
}
2. AreaImpl.java
public abstract class AreaImpl implements Area {
private String result;
@Override
public void print() {
System.out.println(Area.PRINT + result);
}
@Override
public abstract void make();
public void setResult(String result) {
this.result = result;
}
}
3. Circle.java
import java.util.Scanner;
public class Circle extends AreaImpl {
Scanner sc = new Scanner(System.in);
@Override
public void make() {
System.out.print("반지름을 입력해 주세요 : ");
int radius = sc.nextInt();
double res = radius * radius * Math.PI;
setResult(res + "");
}
public void print() {
System.out.print("원의 ");
super.print();
}
}
4. Square.java
import java.util.Scanner;
public class Square extends AreaImpl {
Scanner sc = new Scanner(System.in);
@Override
public void make() {
System.out.print("밑변의 길이를 입력해 주세요 : ");
int width = sc.nextInt();
System.out.print("높이의 길이를 입력해 주세요 : ");
int height = sc.nextInt();
double res = (double)(width * height);
//setResult(res + ""); //문자열로 인식
//setResult(String.valueOf(res));
//setResult(Double.toString(res));
setResult(String.format("%.2f", res));
}
public void print() {
System.out.printf("사각형의 ");
super.print();
}
}
5. Triangle.java
import java.util.Scanner;
public class Triangle extends AreaImpl {
Scanner sc = new Scanner(System.in);
@Override
public void make() {
System.out.print("밑변의 길이를 입력해 주세요 : ");
int width = sc.nextInt();
System.out.print("높이의 길이를 입력해 주세요 : ");
int height = sc.nextInt();
double res = (double)(width * height) / 2;
setResult(res + "");
}
public void print() {
System.out.print("삼각형의 ");
super.print();
}
}
6. MTest
import java.util.Scanner;
public class MTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("도형을 선택해 주세요 \n[1:원 2:삼각형 3:사각형]");
int select = sc.nextInt();
Area area = null;
switch(select) {
case 1:
area = new Circle();
break;
case 2:
area = new Triangle();
break;
case 3:
area = new Square();
break;
}
area.make();
area.print();
}
}
해당 코드는 도형이 원인지 삼각형인지 사각형인지를 입력받아 넓이를 구하는 코드입니다.
인터페이스와 추상클래스의 구조를 위하여 만들어보았습니다.
입력 값에 따른 출력값입니다.
728x90
'Java 관련 > Java' 카테고리의 다른 글
[Java] 싱글톤 패턴(Singleton pattern) (0) | 2021.11.09 |
---|---|
[Java] 내부 클래스(inner class) (0) | 2021.11.08 |
[Java] 추상클래스(abstract class) (0) | 2021.11.06 |
[Java] 상속과 다형성 (0) | 2021.11.05 |
[Java] 다형성(polymorphism) (0) | 2021.11.04 |