오늘 자바 분법 종합 수강을 들으면서 막힌 부분이 있었다.
숫자와 문자(ascii) 파트에서 나온 코드인데 Scanner파트가 이해가 한번에 되질 않아서 막힌 부분을 구글링하여 Scanner 클래스를 정리한 후 코드를 총 정리하려 합니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int asciiNumber = sc.nextInt();
char ch = (char)asciiNumber;
System.out.println(ch);
}
}
우선 하단에 이해한 바를 정리하자면
1. import java.util.Scanner; => 자바 유틸이라는 외부에서 제공하는 것을 사용
→새로 알게 된 사실로 import java.util*; => 해당 import문을 추가하면 java.util패키지 안에 있는 모든 클래스를 import 할 수 있어서 해당 코드로 임포트 하는게 나중에 작업할때 속도가 오른다고 한다.
2. Scanner sc = new Scanner(System.in); => 해당 코드 Scanner 객체를 생성하는 것인데 강의 당시 이해를 하지 못해서 외부 구글링을 통해 알게 되었다.
클래스도 객체를 생성해야만 기능을 쓸 수 있는 것이 있고 생성하지 않아도 되는 클래스가 있다.
a) 클래스를 사용하지 않아도 되는 객체 : println()
b) 클래스를 반드시 사용해야 객체가 생성되는 것: Scanner
System.in은 화면에서 입력을 받겠다는 의미, Scanner클래스는 화면 뿐만 아니라 파일로부터 입력을 받을 수 있고 정수형, 소수형 같은 데이터타입을 입력받기에 System.in을 사용한다.
System.in은 입력한 값을 바이트 단위로 읽으며 자바의 표준 입력 스트림이다.
3. int asciiNumber = sc.nextInt(); => nextInt로 읽은 값을 아스키코드 넘버로 저장
nextInt() : 통째로가 사용자가 입력한 정수 값
4. char ch = (char)asciiNumber; => 아스키넘버를 char로 변환
해당 코드를 실행할 경우 최종적으로 97이라고 입력을 할 경우
상황: imort문을 통해 Scanner 객체 생성 가능
1) 97 입력시 nextInt()로 인해 정수를 받고 이를 아스키 넘버로 변환
2) 아스키넘버로 받은 값을 형변환(char)에 의해 문자열인 char형태로 변환
3) 최종적으로 문자열 char 형태로 변환된 ch 값을 출력 = 'a'
느낀점: 구글링을 통해 해당 코드를 해석함에 있어서 막힌 부분을 배우고 나니 되게 간단하다고 느꼈다.
내가 코드를 보면서 드는 생각은 "영어 지문을 읽는다"는 느낌이다. 영어에서 3형식 5형식 에따라 주어 동사 목적어 보어 등등 여러가지가 달라 붙듯이 코드 또한 그런 것 같다.