[TIL] 코드 재사용, 객체지향, 캡슐화
1) 코드 재사용
1-1) 개념
- 소스코드를 다시 쓰는 것은 재생산에 가깝고, 배포코드를 다시 쓰는 것이 재사용이다.
2) 예제
public class KorExamScore {
public static int count() throws IOException {
int result = 0;
File srcFile = new File("res/data.txt");
FileInputStream srcFis = new FileInputStream(srcFile);
Scanner fscan = new Scanner(srcFis);
while (fscan.hasNext()) {
fscan.next();
result++;
}
fscan.close();
srcFis.close();
return result ;
}
public static int total() throws IOException {
int total =0;
{
File srcFile = new File("res/data.txt");
FileInputStream srcFis = new FileInputStream(srcFile);
Scanner fscan1 = new Scanner(srcFis);
while (fscan1.hasNext()) {
String x_ = fscan1.next();
// fout.print(x_);
int x = Integer.parseInt(x_);
total += x;
}
fscan1.close();
srcFis.close();
}
return total;
}
}
- KorExamScore 라는 클래스를 만든다.
2-1-1) 직접하기
1) 명령 프롬프트를 열어 경로를 해당 클래스가 있는 곳으로 지정해준다.
2) dir을 통해 해당 경로에 있는 파일들을 확인한다.
3) javac KorExamScore.java
를 통해 해당 클래스를 컴파일한다.
4) dir을 통해 해당 경로에 class 파일이 추가 된 것을 확인한다.
5) 해당 클래스를 압축파일로 만들어 준 후 확장자를 jar로 바꿔준다.
2-1-2) 이클립스 이용하기
1) jar파일로 만들고자 하는 클래스가 있는 프로젝트를 마우스 우클릭한다.
2) Export를 클릭한다.
3) 항목들 중 Java - JAR file을 선택한다.
4) 경로를 선택해 원하는 파일을 선택해준다.
2-2) 불러오기
새로운 TestJavaPrj라는 프로젝트에 앞에 저장했던 jar 파일을 적용해보도록 하자.
2-2-1) 자바 버전 변경해주기
1) TestJavaPrj를 우클릭 - Build Path -Configure Build Path를 선택한다.
2) 여러 항목들 중 Libraries -Edit를 클릭한다.
3) JavaSE-1.8로 변경해준다.
- 자바의 버전을 변경하는 이유는 많은 라이브러리들이 8버젼으로 만들어졌기 때문이다.
2-2-2) 라이브러리 불러오기
1) TestJavaPrj를 우클릭 - Build Path -Configure Build Path를 선택한다.
2) 2) 여러 항목들 중 Libraries - Add External JARs를 클릭한다.
3) 해당 jar 파일을 선택한다.
3) 객체 지향 프로그래밍의 시작
3-1) 객체지향 프로그래밍이란 ?
3-2) 캡슐화
-
캡슐은 수납공간이다.
-
함수의 개체수가 너무 많아지면서 문제가 발생했다.
→ 데이터를 위주로 수납한 방식이 바람직하다.
- Ellipse 클래스를 수정할 경우 이를 가져다 쓴 다른 함수에서 문제가 발생할 수 있다.
- 해당 변수들을 쓰는 함수들을 묶어 Ellipse 클래스 안으로 캡슐화한다.
- 오류가 나도 해당 클래스 안에서만 수정하면 된다.
- 함수들을 전부 포함하고 있는 각 파일들로 구성되어 있는데 이것을 캡슐이라고 한다.
3-3) 예제
package part3.ex1.capsule;
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 Program {
public static void main(String[] args) throws IOException {
Exam exam = null;
EXIT:
while(true) {
int menu = inputMenu();
// 1. 성적입력
// 2. 성적출력
// 3. 성적읽어오기
// 4. 성적저장하기
// 5. 끝내기
switch(menu) {
case 1:
exam = inputExam();
break;
case 2:
printExam(exam);
break;
case 3:
exam = loadExam();
break;
case 4:
saveExam(exam);
break;
case 5:
exitProgram();
break EXIT;
}
}
}
//--------------Menu 선택--------------------------------------
private static int inputMenu() {
Scanner scan = new Scanner(System.in);
int menu;
do {
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();
if (menu >=6 && menu<=0)
System.out.println("메뉴를 잘못 입력하셨습니다.");
} while (menu >=6 && menu<=0);
return menu;
}
//------------성적 입력---------------------------------
private static Exam inputExam() {
System.out.print("성적을 입력하시오 (국어 영어 수학) : ");
Scanner scan = new Scanner(System.in);
int kor = 0;
int eng = 0;
int math =0;
Exam exam = new Exam();
kor = scan.nextInt();
if(kor>=0 && kor<=100)
exam.kor = kor;
else
System.out.println("국어 성적을 잘못 입력하였습니다.");
eng = scan.nextInt();
if(eng>=0 && eng<=100)
exam.eng = eng;
else
System.out.println("영어 성적을 잘못 입력하였습니다.");
math = scan.nextInt();
if(math>=0 && math<=100 )
exam.math = math;
else
System.out.println("수학 성적을 잘못 입력하였습니다.");
return exam;
}
//-----------성적 출력 ----------------------------------------
private static void printExam(Exam exam) {
System.out.println("┌────────────┐");
System.out.println("│ Score │");
System.out.println("└────────────┘");
System.out.printf("국어 : %d \n", exam.kor);
System.out.printf("영어 : %d \n", exam.eng);
System.out.printf("수학 : %d \n", exam.math);
System.out.printf("총점 : %d \n", exam.kor+exam.eng+exam.math);
System.out.printf("평균 : %f \n", (double)(exam.kor+exam.eng+exam.math)/3);
}
//-------------성적 불러오기----------------------------------
private static Exam loadExam() throws IOException {
File file = new File("res/exam.txt");
FileInputStream fis = new FileInputStream(file);
Scanner scan = new Scanner(fis);
Exam exam = new Exam();
if(scan.hasNext()) {
exam.kor = scan.nextInt();
exam.eng = scan.nextInt();
exam.math = scan.nextInt();
}
else
{
System.out.println("저장된 값이 없습니다.");
}
return exam;
}
//------------------성적 저장하기--------------------------------------
private static void saveExam(Exam exam) throws IOException {
File file = new File("res/exam.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream fout = new PrintStream(fos);
fout.print(exam.kor + " ");
fout.print(exam.eng + " ");
fout.print(exam.math + " ");
fos.close();
fout.close();
}
//----------------EXIT --------------------
private static void exitProgram() {
System.out.println("작업 끝 !");
}
}
Author And Source
이 문제에 관하여([TIL] 코드 재사용, 객체지향, 캡슐화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psh94/TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)