인스턴스 Instance
예제를 통해 알아보자.
우선 result1.txt 파일에 Hello 1 이라는 텍스트를 JAVA를 이용해서 작성해볼 것이다.
여러 방법이 있지만 PrintWriter라는 Class를 사용할 것이다. PrintWriter는 Math 라는 Class와 사용법이 다르다.
public class InstanceApp {
public static void main(String[] args){
PrintWriter p1 = new PrintWriter("result1.txt"); // result1.txt 자리에는 저장하고 싶은 파일명
/* PrintWriter에 new를 붙여서 복제본, 아바타 같은 것을 만든다.
그리고 복제본을 p1이라는 변수에 담았다.
그렇다면 변수에 담겨있는 어떠한 무엇을 PrintWriter라는 Class의 Instance인 것이다.
이 p1변수에 아무것이나 들어가면 안되기 때문에 PrintWriter라는 Class의 Instance만 들어간다는 뜻에서
DataType으로 PrintWriter을 지정해줬다. */
}
}
PrintWriter p1 = new PrintWriter("result1.txt"); 를 작성하면 빨간색 밑줄이 생긴다.
Math의 경우에는 특별한 조치를 하지 않아도 사용할 수 있다.
그런데 PrintWriter는 JAVA에 내장되어 있기는 하지만 Package를 가져 오는 작업을 해야 한다.
import java.io.PrintWriter; //이 파일 내에서PrintWriter라는 Class는 java.io에 소속되어 있는 것이다.
public class InstanceApp {
public static void main(String[] args){
PrintWriter p1 = new PrintWriter("result1.txt");
}
}
그래도 빨간색 밑줄이 그어져 있다.
우리가 파일을 읽다보면 예를 들어 파일이 없으면 문제가 될 수 있다. 바로 그러한 경우를 JAVA에서는 예외 상황이라고 하는데 그런 예외 상황을 어떻게 처리할 지에 대해서 우리가 정해야 되는데 예외를 공부하기 이전 까지는 Add throws declaration을 클릭하자.
그리고 IOException - java.io 클릭.
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {
public static void main(String[] args) throws IOException {
PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();
}
}
이후에 복사해서 p2라는 변수에 result2.text를 담아보자.
그리고 Navigator에서 Refresh를 하면 어떤 일이 일어나는지 보자.
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {
public static void main(String[] args) throws IOException {
PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();
PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();
}
}
result1.txt 와 result2.txt 가 생성된 것을 볼 수 있다.
Instance란 무엇인지 원점으로 돌아와 다시 살펴보자.
여기서 PrintWriter는 new를 통해서 Instance를 만들었고 그 Instance는 내부적으로 각자의 상태를 가지고 있다.
여기서의 상태는 p1은 result1.txt, p2는 result2.txt 라는 내부적인 상태를 내장하고 있기 때문에
p1.write(" "); 는 result1.txt에 대한 것,
p2.write(" "); 는 result2.txt에 대한 것이다.
오른쪽에 Math의 경우에는 일회용의 작업이다. 즉 아주 짧은 맥락의 작업들이다.
( System.out.println(Math.PI); // 3.14가 필요하다. )
그런데 우리가 어떤 파일을 수정한다는 것은 그 파일 하나만 수정하는 것이 아니라 그 파일에 대한 작업들이 후속으로 여러 개 들어오게 되고 그리고 동시에 여러 개의 파일을 작업하게 될 수도 있다.
그렇기 때문에 하나의 Class를 사용하기보다는
하나의 Class 앞에 new를 붙여 복제해서 각각의 다른 상태를 가지고 있는 Instance를 만들어서 사용하는 것이 더 효율적일 수 있다.
Math 와 PrintWriter 는 어떤 차이가 있는지 메뉴얼을 통해서 살펴보자.
PrintWriter 는 Constructor을 가지고 있다는 것이다.
우리가 어떤 Class를 사용할 때 그 Class를 Instance로 활용하기를 원한다면 Constructor을 갖고 있고,
예재에서 살펴보면 new 뒤에 PrintWriter("result1.txt")가 Constructor 라고 할 수 있다.
Constructor 앞에 new를 붙이면 Instance가 되고 그 Instance에 어떤 값이 올 수 있느냐를 규제하기 위해서 앞에다가 PrintWriter라고 하는 Class의 이름을 적는다.
'youtube.com|user|egoing2 > JAVA1' 카테고리의 다른 글
JAVA1 - 14.1 나의 앱 만들기 (OT, 기본 기능 구현) (0) | 2022.01.21 |
---|---|
JAVA1 - 13.3 상속 Inheritance (6) | 2022.01.20 |
JAVA1 - 13.1 자바 문서 보는 법 (패키지, 클래스, 변수, 메소드) (2) | 2022.01.20 |
JAVA1 - 10. 디버거 (0) | 2021.12.16 |
JAVA1 - 9. 프로그래밍 예제 IoT (3) | 2021.12.16 |