[TIL] 캡슐화 예제, 인스턴스 메소드
1) 캡슐화 추가내용
1-1) 캡슐을 깨뜨리는 행위
- 어느 데이터를 다른 클래스 or 캡슐에서 사용하는 경우가 있다.
1-2) 접근 제어 지시자
- 접근 제어 지시자를 통해 다른 클래스에서의 접근을 허용하거나 차단할 수 있다.
1-3) 예제
package part3.ex1.capsule2;
import java.io.IOException;
import java.util.Scanner;
public class Program1 {
public static void main(String[] args) throws IOException {
while (true) {
int menu = inputMenu();
Exam exam = new Exam();
switch (menu) {
case 1:
Exam.input(exam);
break;
case 2:
Exam.print(exam);
break;
case 3:
Exam.load(exam);
break;
case 4:
Exam.save(exam);
break;
case 5:
exitProgram();
break;
}
}
}
// Program의 Bottom 구성
private static boolean exitProgram() {
return true;
}
private static int inputMenu() {
Scanner scan = new Scanner(System.in);
int menu = 0;
System.out.println("┌────────────────────────────────┐");
System.out.println("│ 성적관리 Main Menu │");
System.out.println("└────────────────────────────────┘");
System.out.println("1. 입력");
System.out.println("2. 출력");
System.out.println("3. 읽기");
System.out.println("4. 저장");
System.out.println("5. 종료");
System.out.print(">");
menu = scan.nextInt();
return menu;
}
}
package part3.ex1.capsule2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class Exam {
private int kor;
private int eng;
private int math;
public static void save(Exam exam) throws IOException {
File file = new File("res/data.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
ps.printf("%d,%d,%d\n", exam.kor, exam.eng, exam.math);
ps.close();
fos.close();
}
public static Exam load(Exam exam) throws IOException {
File file = new File("res/data.txt");
FileInputStream fis = new FileInputStream(file);
Scanner scan = new Scanner(fis);
String[] tmps = scan.nextLine().split(",");
scan.close();
fis.close();
exam.kor = Integer.parseInt(tmps[0]);
exam.eng = Integer.parseInt(tmps[1]);
exam.math = Integer.parseInt(tmps[2]);
return exam;
}
public static void print(Exam exam) {
Scanner scan = new Scanner(System.in);
if (exam == null) {
System.out.println("성적이 입력되지 않았습니다. (Exam 객체가 존재하지 않음)");
return;
}
System.out.println("┌───────────────────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└───────────────────────────────────┘");
System.out.println("국어 : " + exam.kor);
System.out.println("영어 : " + exam.eng);
System.out.println("수학 : " + exam.math);
int total = exam.kor + exam.eng + exam.math;
System.out.println("총점 :" + total);
System.out.printf("평균 : %.2f\n", (total / 3.0));
}
public static void input(Exam exam) {
Scanner scan = new Scanner(System.in);
System.out.println("┌───────────────────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└───────────────────────────────────┘");
System.out.println("국어 >");
exam.kor = scan.nextInt();
System.out.println("영어 >");
exam.eng = scan.nextInt();
System.out.println("수학 >");
exam.math = scan.nextInt();
}
}
2) 인스턴스 메소드
2-1) 객체지향을 위한 표현
-
exam을 입출력 수행할 때 왼쪽의 코드보다 오른쪽의 코드가 더 직관적이다.
-
왼쪽은 객체 위주가 아닌 고전적인 것으로 Function이라고 부른다.
-
오른쪽은 객체 위주로 표현할 수 있도록 해주는 것으로 Method라고 부른다.
2-2) 표현의 방식을 변화시킨 함수의 모양
-
기존의 함수의 인스턴스 전달
1)
static
을 통해 객체지향을 지원하지 않음을 나타냈다.2) 부가적인 녀석으로만 객체를 전달한다.
3) 매개변수로만 넘겨받는다.
4) this를 쓸 수 없다.
5) 스태틱 메소드라도고 부른다.
-
새로운 함수의 인스턴스 전달
1) 객체를 통해서 호출한다.
2) 객체를 넘겨 받을 수 있다.
3) 객체를 넘겨 받는 녀석을 인스턴스 함수라고 한다.
4) 예약되어 있는 이름
this
를 통해exam
을 넘겨받는다.5) 메소드 or 인스턴스 메소드라고 부른다.
Author And Source
이 문제에 관하여([TIL] 캡슐화 예제, 인스턴스 메소드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psh94/TIL-캡슐화-예제-인스턴스-메소드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)