국비교육

국비지원 53일차 (JAVA - Scanner,형변환(casting))

재밌는개발러 2023. 10. 10. 23:48

※우선 지난번에 했던 변수 사용법에 관해 예제를 풀어보면서 다시 한번 개념 정리를 해보도록 할 것입니다.

그리고 오늘 수업했던걸 차례대로 복습을 할 예정입니다.

 

※변수 사용법 예제

//실수형
int i = 10;
float f = 10.0f;
double d = 10.0;
System.out.println("f : " + f); // 10.0
System.out.println("d : " + d); // 10.0
System.out.println("d+f : " + (d+f)); // 20.0
System.out.println("d+i : " + (d+i)); // 20.0

1) System.out.println("d+f : " + (d+f));

-> 앞에 출력문이 문자면 뒤에 꺼도 문자로 보게 된다. 그래서 뒤에 d+f 부분이 숫자로 결괏값이 나오게 하려면 () 안에 명시해줘야 한다.

2) System.out.println("d+i : " + (d+i)); 

-> 실수 d와 정수 i를 더하게 되면 더 큰 값의 자료형을 따라가게 돼있다. 즉, 정수보단 실수가 더 세므로  실수 d의 자료형을 따라가게 된다. 그래서 실수로 결괏값이 나타나게 된다.

 

char c = 'A';
String s = "홍길동";
System.out.println("c : " + c); // A
System.out.println("s : " + s); //홍길동
System.out.println("c+s : " + (c+s)); // A홍길동
System.out.println("c+s : " + c+s);// A홍길동

-> 문자형을 더하면 괄호를 치던 안치던 앞에 출력문이 있는 경우에는 똑같은 결괏값이 나오는 걸 볼 수 있다.

 

※Java-Scanner

 

1. 기본적인 데이터 타입들을 Scanner의 메서드를 사용해 입력받을 수 있다.

-> String(문자열)로 입력받고 싶으면 스캐너 변수에 next() 나 nextLine()을 입력하고, int(정수)로 입력받고 싶다면 nextInt()를 사용하여 입력하면 해당 타입으로 입력이 됩니다.

 

2.Scanner을 사용할 시 util 패키지를 경로의 Scanner 클래스를  호출해야 한다.

-> 자바에서 쓰이는 대부분의 클래스는 lang 패키지가 아니라면 import을 통해 호출해야 줘야 한다.

스캐너의 경우는 java.util 패키지에 있다. (alt-enter) 키를 활용해 import 할 수 있다.

 

※ Java-Scanner 예제

import java.util.Scanner;

-> 이렇게 스캐너를 쓰기 전에 메인클래스인(public 클래스) 위에다가 import 선언을 먼저 해야 된다. 

' 남이 만들어놓은 scanner라는 클래스 갖고 와 쓴다는 뜻'이다.

 

 

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("이름을 입력하시오");
        String name = sc.nextLine(); 
        System.out.println("출력 : " + name);

        System.out.println("나이 입력하시오");
        int age = sc.nextInt();
        System.out.println("나이 : " + age);

        System.out.println(name+ "님의 입력한 나이는 " + age + "살 입니다.");

    }

1)  Scanner sc = new Scanner(System.in); 

-> 스캐너라는  객체 (인스턴스) 생성해야지 사용 가능합니다. (system.in(입력) 은 system.out(출력)에 반대말로 생각하면 될 것이다.)

-> 스캐너는 자바스크립트의 prompt의 개념과 같다고 보면 된다. 한번 위와 같이 선언하면 나중에 쓸 때는 변수명과 자료타입을 다르게 하여 여러 번 입력받을 수 있다.

 

2) System.out.println("이름을 입력하시오");

-> 어떤 것을 입력받을 것인지  알려주는 역할을 한다.

 
3) String name = sc.nextLine(); 

-> 스캐너로 입력받는 것은 nextLIne() 즉, String 타입  문자값으로 입력받는다는 뜻이다.

-> sc(스캐너 변수에) nextline() 문자값을 입력받는 것을 name이라는 변수에다가 저장한다는 뜻입니다.

 

3-1) int age = sc.nextInt();

-> nextlnt(), 즉 int 타입 정수값으로 입력받는다는 뜻입니다.

 

System.out.println(age>=19?"입장가능":"입장불가");

4) 이렇게 삼항조건식으로 스캐너로 입력받은 나이가 19살 이상이면' 입장가능', 19살 미만이면 '입장불가' 조건식을 나타낼 수 있다.

 

 

※Java-형변환(casting)

1.boolean 형을 제외한 모든 자료는 형변환 가능. (다만 숫자를 문자열로 변환하는 건 조금 다르게 해야 됨)
   1) '자동 형변환'
   2) '캐스팅' 작업을 해야 하는 형변환

2. 변환 방법
   1) 숫자  -> 다른 숫자형
      (변환할 타입) 값
     ex) double d = 3.14;
      int i = (int) d; <= 이렇게 하면 3만 저장됨
 
    2) 숫자 -> 문자
       String 클래스를 이용해야 함.
       ex) String.valueof(숫자)
 
 3. 자료형 확인
       기본형은 타입 확인이 안 되고
       참조형만 확인 가능하다
       자바스크립트의 typeof처럼 '자료형은 뭐다'이런 건 없다.
       이 데이터가 이거냐??처럼 물어보면 true 나 false로 대답해 주는 정도임.
       ex) 데이터(변수) instanceof 자료형
       a instanceof String

       

       *true 일 때만 인식이 되고 false일 때는 아예 프로그램이 되지 않고 오류가 뜬다.
       *instanceof는 부모자식(참조) 관계에서만 사용가능함.

 

※Java-형변환 예제

double d = 3.14;
int i = (int)d; // 3.14 더블값을 int 로 형변환 해서 정수형으로 바꾸고 소수점 이하는 없어지게된다.
System.out.println("i: " + i); // 3
       
System.out.println("== 자동 형변환 =="); // (문자 + 숫자= 문자)
System.out.println("홍길동 " +  10); //10 도 문자형으로 변형
//앞에 홀길동 이라는 출력문이 있으니 뒤에 10도 문자형으로 자동으로 변형이된다.

System.out.println("== 수동 형변환 ==");
//정수 -> 문자
int num =65; //아스키 코드
char ch = (char)num; // 65는 아스키코드로 문자로 변형하면 대문자 A를 뜻한다.
System.out.println(ch);
System.out.println((int)'A');
//문자 -> 정수
char ch2 = 'A';
System.out.println((int)ch2);
//실수 -> 정수
double d2 = 3.14;
int i2 = (int)d2; // 소수점 뒤를 날려버림 3.14 ->3
System.out.println(i2);

※Java-형변환 예제 2 (중요)

 

 => 숫자형 -> 문자형, 문자형->숫자형
   * String , Integer는 클래스를 뜻하고. 뒤에 거는 정의된 메서드를 뜻한다.
    1) String.valueof(숫자) -> 숫자를 문자로 바꿔줌
    2) Integer.toString(숫자) -> 숫자를 문자로 바꿔줌
    3) Integer.valueOf(문자열) -> 문자열을 정수숫자로 바꿔줌(정수만가능)
    4) Integer.parseInt(문자열) -> 문자열을 숫자로 바꿔줌
    5) Double.valueOf("20.2") -> 문자열을 실수 더블로 바꿔줌

        String s = String.valueOf(10.1);// 숫자형을 문자로바꿔줌
        System.out.println("s: " + s);
        System.out.println(s instanceof String);
        
        Integer i1 = Integer.valueOf("20"); //문자형을 정수로 바꿔줌
        System.out.println("i1:" + i1);
        System.out.println(i1 instanceof Integer);
        
        Double d1 = Double.valueOf("20.2"); //문자형을 실수로 바꿔줌
        System.out.println("d1:" + d1);
        System.out.println(d1 instanceof Double);

        String s1 = Integer.toString(100); //정수만 가능.
        String s2 = Double.toString(100.01);
        System.out.println(s1 + ", " + s2);
        System.out.println(s1 instanceof String); //문자형 true
        System.out.println(s2 instanceof String); //문자형 true

        // 문자열  -> 숫자
        Integer num3 = Integer.parseInt("100");
        System.out.println("num3: " + num3);
        System.out.println("num3은 정수냐? " + (num3 instanceof Integer));

        Double num4 = Double.parseDouble("100.1");
        System.out.println("num4: " + num4);
        System.out.println("num4은 실수냐? " + (num4 instanceof Double));

//      ///////////////////////////////////////////////////

        Number num10 = Integer.parseInt("100");
        System.out.println("num10은 정수냐? : " + (num10 instanceof Integer)); // true

        Number num20 = Double.parseDouble("100.1");
        System.out.println("num20은 실수냐? : " + (num20 instanceof Integer)); // false