문자열 - JAVA
JAVA에서 문자열은 Object (객체)로써 정의되어져서 활용된다.
그래서, JAVA에서 문자열을 활용할 때는 객체로써 접근하고 활용되어진다.
위와 같은 원리로 문자열이 다뤄진다.
첫번째는
String s = "abc"
Char [] t = new char[3]
지정하면, s 와 t는 서로 다른 객체이고,
문자열 데이터는 같더라도 타입은 다르다.
equals() 메소드 결과도 false가 출력된다.
두번째는 자바 내에서 문자열 객체처리를 유연하게 만들어둔 예시다.
이는 , 교수님도 이해하지 못한다고 하셨고, 이에 대해선 자바 규칙이니 받아드리자.
세번째는 문자열 객체를 달리 지정해주는 것이다. 두번째의 헷갈림을 방지하기 위한 자바 개발 전략인 셈이다.
# 자바 객체 추가설명
int, double, 등등의 타입의 object의 정의를 가지지 않는다.
즉, 기초 정의가 object (객체) 개념이 벗겨져서 타입으로 할당되어 있다.
문자열은 object (객체) 개념을 지니고있다.
그래서, 문자열을 접근할 때는 객체로써 접근을 하기에,
"==" 연산을 사용하지 않고, equals() 메소드를 사용해서
비교연산을 진행한다.
object 객체의 정의를 지니고 있기에, 포인터 개념으로 문자열이 선언된다.
정리해서, 문자열은 일반적으로 사용하는 객체와 같다고 생각하면된다.
파일처리
# 파일의 텍스트를 문자열 토큰으로 처리해주는 토큰 클래스
파일 텍스트를 어떻게 읽는지를 해당 클래스를 통해서 설정해주고, 읽을 파일에 대한 정보를 원하는 대로 읽게 해준다.
# 파일 생성 클래스
FileWriter
# 파일 텍스트 쓰기 클래스
PrintWriter
예외처리 - 종류
Exceptions (예외처리)를 위한 클래스들이 구현되어져 있다.
# 예외처리 - 코드 구현
예외처리 동작방식은,
try 문에서 예외 에러가 발생하면, Exception 객체를 만들어서
코드에서 뿌려준다.
이는, catch에서 받아서 예외에러에 대한 예외처리를 진행한다.
이떄, 예외 타입이 try문에서 발생한 에러와 일치해야되며, 동일한 타입일 때,
변수에 예외에러를 저장한다.
그러고, catch문 내부에 에러를 발생했을 때의 코드를 작성한다.
# 예외처리 - 코드 구현 예시
0 나누가 에러에 대한 예외처리
정수가 아닌 수에 대한 입력에 대한 에러 에외처리
import javax.swing.*;
public class Test {
public static void main(String[] args) {
int n = readInt();
try {
String answer = "100에서 나누기 " + Integer.toString(n) + " = " + (100 / n);
JOptionPane.showMessageDialog(null, answer);
}
catch (ArithmeticException e) {
JOptionPane.showMessageDialog(null, e.getMessage() + " : 0으로 나눌 수 없습니다.");
}
}
private static int readInt() {
int n;
String input = JOptionPane.showInputDialog("정수를 주세요. 100에서 나누어 드립니다.");
try {
n = Integer.parseInt(input.trim());
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null, e.getMessage() + " 정수가 아닙니다.");
n = readInt(); // 재시도
}
return n;
}
}
예외처리 클래스 - Validation 체크해주는 클래스 분할
데이터 입력에 대한 Validation을 체크해주는 예외처리 클래스를 별도로 분할하였다.
자바 개발 규칙 중 하나이고, 개발 전략이다.
이렇게 개발하는 법이 답이 아니고, 좋은 방법 중 하나라고 생각하자.
import javax.swing.*;
public class DialogReader {
public String readString(String prompt) {
return JOptionPane.showInputDialog(prompt);
}
public int readInt(String prompt) {
int n;
String input = readString(prompt);
try {
n = Integer.parseInt(input.trim());
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null, e.getMessage() + " 정수가 아닙니다.");
n = readInt(prompt);
}
return n;
}
public double readDouble(String prompt) {
double n;
String input = readString(prompt);
try {
n = Double.parseDouble(input.trim());
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null, e.getMessage() + " 실수가 아닙니다.");
n = readDouble(prompt); // 재시도
}
return n;
}
}
'CS 대학강의' 카테고리의 다른 글
[CS 1-2 | 프로그램 설계 방법론] 기말 기출해석 (0) | 2022.11.18 |
---|---|
[CS 1-2 | 프로그램 설계 방법론] 텍스트 파일 처리 - 사례학습 18주차 (0) | 2022.11.18 |
[CS 1-2 | 오픈소스 SW 기초] 사물인터넷 7주차 (0) | 2022.11.17 |
[CS 1-2 | 프로그램 설계 방법론] JAVA로 블랙잭 프로그램 제작 (0) | 2022.11.16 |
[CS 1-2 | 시스템 프로그래밍 기초] 시스템 프로그래밍 기초 - #16 [문자열] (0) | 2022.11.15 |