일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- java
- Javapopup
- class선택자
- Class
- SQL문제풀이
- AndroidDeveloper
- string
- initial commit
- Java입문
- 상위 N개 레코드
- compile
- CSS
- 프로그래머스
- HTML
- 라즈베리파이
- IOT
- Javascript
- Database
- fatal: Not a valid object name: 'master'
- jdoodle
- 자바의정석
- 헌혈
- 생활코딩
- Javaswing
- XHR
- Math.
- variable
- API
- helloworld!
- id선택자
- Today
- Total
Sun의 정리정돈
[37/50]JAVA1-13.4. 자바 문서 보는 법 - 인스턴스 본문
result1.txt 파일에다 Hello1이라는 텍스트를 java를 이용해 작성할 것이다.
PrintWriter 라는 class를 사용
("저장하고 싶은 파일 이름"), 앞에 new를 붙이면 복제본을 생성, 그리고 p1이라는 변수에 담는다.
p1 = new PrintWriter ("result1.txt")
p1변수에 담긴 것을 class PrintWriter의 instance라고 한다.
PrintWriter p1 = new PrintWriter ("result1.txt")
그리고 변수 p1에 아무거나 들어가게되면 안되기 때문에 변수 앞에 PrintWriter 입력해 데이터타입을 지정해준다.
그러면 에러가 났다고 빨간 줄이 쳐진다. class Math와 다르게 class PrintWriter는 패키지를 따로 가져오는 작업을 필요로 한다. (Import)
에디터 상단에 import java.io.PrintWriter;
(PrintWriter가 java의 io패키지에 소속되어 있음) 하지만 이렇게 작성해도 다른 에러가 발생한다.
이는 java에서 파일이 없는 예외상황을 대비하여 어떻게 처리할 것인지를 정해두기 위함인데, 아직은 이해하기 어려우므로 좀 더 섬세한 소프트웨어를 만들기 전까지는 Add throws declaration을 눌러 넘긴다.
(throws IOException이 추가된다)
그리고 p1.write("Hello 1");을 작성하게 하고
p1.close();를 넣으면 타인도 수정할 수 있게 된다.
이제 인스턴스가 무엇인지 알아보자.
아래의 에디터 창에 있는 클래스에는 그냥 변수이름을 쓰거 메소드를 사용하였다.
그러나 PrintWriter에는 new를 붙였다. 이는 PrintWriter의 복제 결과를 p1이라는 변수에 담게 만들었다.
이렇게 한 이유가 무엇일까?
인스턴스 방식이 아닌 일반적인 형식으로 같은 코드를 작성한다고 가정해본다.
같은 방식으로 동작한다고 가정하고, PrintWriter.write("result1.text", "Hello 1");라고 작성한다면 (여러개로)
예를 들어 result1.txt에 내용을 기록하고 싶은 경우 인스턴스 방식은 변수p1 을 작성하여 텍스트를 추가하면 되지만,
일반 형식은 클래스마다 직접 작성해야하므로 번거로운 일이 발생하게 된다.
일반 형식으로 작성한 경우에는 많은 class PrintWriter를 .write 메서드 혼자 돌려쓰고 있다.
그러나 인스턴스 방식의 write는 new를 통해 자신의 변수(p1, p2)에 각자의인스턴스를 만들었고 그 인스턴스는 내부적으로 각자의 상태를 가지고 있다. (p1.write는 result1에 대한 상태, p2.write는 result2에 대한 상태)
즉, p1.write를 작성하면 이는 result1에 대한 것이 된다.
오른쪽의 math클래스 명령어들은 일회용 작업과 같은 것이다. pi값이 필요하거나 소수를 올림하거나 내림하는 등의 작업과 같은 간단하고 짧을 명령들을 수행할 때 사용하기 좋다.
그러나 파일을 수정하는 것은 그 파일과 관련한 작업들도 후속적으로 하게 될 경우가 자주 발생하고 동시에 여러가지 파일을 작업해야 할 수 있다.
이러한 경우에는 위처럼 하나의 클래스를 사용하기 보다는 클래스 앞에 new를 붙여 복제해서 각각 다른 상태를 가지게 하는 인스턴스를 만들어 사용하는 것이 효율적이다.
그렇다면 이제 Math와 PrintWriter의 차이를 살펴보자.
PrintWriter는 생성자(constructor)가 존재
Math는 생성자가 없음 (-> 일단 일회용이라고 생각하자)
생성자(constructor)는 인스턴스를 만드는 것이 허용되어 있는 것이다.
이를 클릭하면 생성자의 사용방식에 대해 확인할 수 있다.
어떤 데이터 값을 넣어야하는지 (예제에서는 데이터값을 String인 "result.txt"로 주었음), 그리고 생성자에 입력되는 값으로는 어떤 것들이 들어와야 하는지(parameter), 또 어떤 오류들이 발생할 수 있는 지(Throws)등이 명시되어 있다.
'BackEnd > Java' 카테고리의 다른 글
[36/50]JAVA1-13.3. 자바 문서 보는 법 - 클래스 (0) | 2022.11.02 |
---|---|
[35/50]JAVA1-13.2. 자바 문서 보는 법 - 패키지,클래스,변수,메소드 (0) | 2022.11.01 |
[34/50]JAVA1-13.1. 자바 문서 보는 법 - API vs UI (0) | 2022.11.01 |
[33/50]JAVA1-12.5. 직접 컴파일하고 실행하기 - 입력과 출력 (0) | 2022.11.01 |
[32/50]JAVA1-12.4. 직접 컴파일하고 실행하기 : 라이브러리 이용 (0) | 2022.11.01 |