본문 바로가기
공부기록/Java

4월 7일 (1) Java - 인스턴스, 형 변환, Scanner

by project100 2023. 4. 7.

new project 만들때 add sample code 해제

에디터 : 문장을 작성하는 편집기, 들여쓰기, 가독성있게 작성하도록 도움을 줌


인스턴스(Instance) - 실체화된 객체

메모리 상에 생성된 class로 만든 객체

 

객체 = 정보 + 기능(방법)

        = 변수 + 함수(메소드)

 

클래스(Class) : 객체를 만들기 위한 설계도

 

프로그램은 인스턴스를 사용하여 만든다.

 

자바의 라이브러리는 내가 설계하지 않지만 사용해야 하는 class로 되어 있다. 즉, 설계도의 모음

예) Scanner

 

완성된 프로그램 = 내가 작성한 코드(class)로 만든 인스턴스 + 라이브러리로 제공되는 class로 만든 인스턴스

 

인스턴스를 만드는 방법(문법)

설계도명(class명) 인스턴스이름 = new 설계도명(필요자원);

예) Scanner scan = new Scanner(System.in);

System.in - 키보드로 입력받는 값을 의미한다.

 

인스턴스 사용법

인스턴스이름.인스턴스변수 = 값; //입력

인스턴스이름.인스턴스메소드(); //함수호출, 메소드호출

 

자바는 모든 것을 객체로 만들었다.(객체 지향 프로그래밍 언어)

 

데이터 타입(자료형, Date Type)

데이터의 크기 순서

byte < short < int < long < float < double < String(크기를 알 수 없다.)

 

형변환(Type Casting) p 53

숫자형과 문자열형에서만 이루어진다.

변수는 변하지 않는다. 단, 변수에 저장된 값을 꺼내와서(복사) 새로운 자료형으로 변환하는 것을 형변환이라고 한다.

 

규칙1. 작은 자료형의 데이터를 큰 자료형의 데이터로 변환할 때는 자동을 처리한다.(자동형변환, 암시/묵시적 형변환)

규칙2. 큰 자료형의 데이터를 작은 자료형의 데이터로 변환할 때는 반드시 형변환 연산자를 사용한다.

(강제형변환, 명시적 형변환)

 

형변환연산자(Cast Operator) 

' ' 사이에 형 지정

예) long a = 10000L;

      int b = (int) a;

 

클래스는 하나의 로봇을 만드는 설계도라고 생각하자.

main은 시작과 끝을 나타내는 메소드다.

 

Cannot resolve symbol : 변수 타입에러가 생겼을 때

 

// 형변환
public class SecondClass {
    public static void main(String[] args) {
        byte byteValue = 10;
        int intValue = byteValue; // 자동 형변환

        long longValue = 5000000000L;
        float floatValue = longValue;
        double doubleValue = floatValue;

        char charValue = 'A'; //65라는 숫자를 저장
        int intValue2 = charValue;


        char charValue2 = 68;

        System.out.println(intValue2);
        System.out.println(charValue);
        System.out.println(charValue2);

        for(byte i = 65; i < 91; i++){
            char c = (char)i;
            System.out.println(c);
        }

        // 숫자 -> 문자열, 문자열 -> 숫자 : 특별한 방법이 필요
        /*
        String snum = "1234";
        int intNum = (int) sunm; 실행 오류
        */
    }
} // 클래스 밖에는 명령문이 올 수 없다.

참고) 객체의 원자적인 형태

변수(필드)와 변수에 값을 넣는 메소드(setter), 변수의 값을 가져오는 (복사하는) 메소드(getter)

물론 setter와 getter는 선택 사항이다. 

 

 

Wrapper Class(기본 자료형을 객체로)

자료형은 객체가 아니다! 

자바는 모든 것을 객체로 -> 자료형을 객체로 만들자

=> Wrapper Class 탄생

 

자료형에 대한 정의와 보조적으로 사용할 수 있는 기능 메소드를 묶어 놓은 class (기본 자료형 8개에 대해서만 존재)

보조기능 예) 문자열을 숫자로 변환하는 기능 등

Type Wrapper Class
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

※ 권장 규칙 : 클래스의 이름은 첫글자를 대문자로 한다.(파스칼케이스)

String : 문자열로 처리하는 규칙과 보조 기능 메소드로 구성된 클래스

형변환 제외 : boolean 타입

 

각 class에서 변환용 메소드를 제공 p64-5 

숫자 -> 문자열 : String 클래스에 valueOf 메소드로 제공

"" + 숫자 -> 문자열로 자동 형변환

 

숫자문자열 -> 숫자 : 각 Wrapper에 parseXXX 메소드 제공

예) "1324" -> Interger.parseInt("1324"); => 정수 1324로 변환

"3.14" -> Float.parseFloat("3.14"); => 실수 3.14로 변환

 

        //숫자형 변수와 문자열 변수의 연산(결합)
        //최종 결과는 무조건 문자열.
        String s = 1 + 5 + 6 * 2 + "개";
        System.out.println(s);
        s = "갯수 : " + (1 + 5 + 6 * 2);
        System.out.println(s);
        
        // 숫자 -> 문자열 : String.valueOf(숫자)
        s = "갯수 : " + String.valueOf(50);
        System.out.println(s);

        // 공백문자열을 사용하면 자동으로 문자열로 형변환이 된다.
        s = "" + 1000;
        s = 1000 + "";

 

 

Scanner문제점 해결 방법 1, 2

import java.util.Scanner;

// Scanner의 문제
public class ThirthClass {
    public static void main(String[] args) {
        // 사용자로부터 2개의 값을 입력받아서 덧셈하고 출력하는 프로그램
        int num1, num2, result;

        // 입력을 받는 장치 객체 Scanner
        // 인스턴스(소문자)는 객체 이름(대문자)을 따와서 만드는 경우가 많다.
        // 입력장치 System.in
        Scanner scanner = new Scanner(System.in);

        // Scanner의 문제
        /*System.out.print("문자열 입력 : ");
        String str = scanner.nextLine();
        System.out.print("정수 입력 : ");
        int num = scanner.nextInt();
        System.out.println("문자열 - " + str);
        System.out.println("정수 - " + num);

        // 정수 입력 후 문자열 입력이 실행되지 않고 출력된다.
        // 숫자를 입력할 때 엔터를 칠 때까지 키버퍼에 모아두었다가 실행 1인지 1000인지 구별하기 위해서
        // nextInt는 숫자만 받기 때문에 엔터가 문자열로 처리되어서 값을 입력할 수 없게 된다.

        // 문제 없애기 1. 엔터 문자 없애기
        System.out.print("정수 입력 : ");
        int a = scanner.nextInt();
        scanner.nextLine();//엔터 문자 없애기
        System.out.print("문자열 입력 : ");
        String b = scanner.nextLine();
        System.out.println("문자열 - " + b);
        System.out.println("정수 - " + a);*/

        // 문제 없애기 2. Wrapper Class 문자열로 전부 값을 받고, 숫자는 숫자로 변환시키기
        System.out.print("문자열 숫자 입력 : ");
        String a1 = scanner.nextLine();
        System.out.print("문자열 입력 : ");
        String b2 = scanner.nextLine();
        System.out.println("문자열 - " + b2);
        System.out.println("문자열 숫자 입력 - " + a1);
        // 숫자 문자열을 정수로 변환
        int a2 = Integer.parseInt(a1);
        System.out.println("숫자로 변환 : " + a2);

    }
}