basic/java 이론

day02 - [변수, 출력문, 형변환, Scanner입력문]

못지(Motji) 2021. 4. 23. 18:14

1. 변수

1) 접미사

· int a = 100;

· long l = 10L; 기본은 int로 인지하기 때문에 뒤에 L을 붙여줌 > 가독성 때문에 대문자로 주로 씀

· double d = 1.23;

· float f = 1.23F; // 1.23 float 타입이고 싶어

2) 기본값 (의미가 없게, 해가 없게, 혼자 돌아가지 않도록, 값을 뭘 넣어야할지 모를때)

· boolean : false

· char : '\u0000' : unicode

· int, double : 0, 0.0

· 참조형 : null

3) 정수의 오버플로우 (overflow)

· byte b = 127;

· byte b = 128; error

2. 출력문

1) 종류

(1) System.out.println(); : 엔터기능 O

(2) System.out.print(); : 엔터기능 X

(3) System.out.printf(); : 엔터기능 X, 서식문자 이용, 자바에서는 안씀

* 서식문자 (printf())

%d : 정수

%c : 글자 한개

%s : 글자 한개이상

%f : 실수

printf("서식문자를 포함한 출력문 형태",서식문자에 해당하는 데이터);

2) 출력데이터 형태

· 숫자 출력 : 값

· 문자 한개 출력 : '문자' : 홑따옴표로 묶기

· 문자 한개 이상 출력 : "문자열" : 곁따옴표로 묶기

3) 출력문내 연산

· 숫자 + 숫자 (10+10); > 20

· "문자" + "문자" ("Hello" + "java"); > Hellojava > 문자로 연결된 문자 출력

· "문자" + 숫자 ("Hello" + 10); > Hello10 > 문자로 연결된 문자 출력

· '문자' + 숫자 > 아스키코드값 + 숫자 결과값 숫자 출력

4) 이스케이프 문자 : 문자이기 때문에 "" 안에 작성

·출력문내에 어떠한 기능을 가지고 있는 특수 문자

\n : 줄바꿈 (엔터기능)

\t : 탭간격주기

\" : 겹따옴표를 문자로 출력할때

\' : 홑따옴표를 문자로 출력할때

\\ : 역슬래쉬 출력할때

3. 형변환 (Casting, type coversion, type converting)

boolean 타입을 제외한 다른 타입들을 변환시키는 것

1) 구조

(데이터 타입)변수 또는 데이터

char < int < long < float < double

2) 큰 > 작은 : 다운캐스팅, 디모션, 강제형변환

강제 형변환하여 대입을 시키면 데이터 회손의 우려가 있다.

ex.

int n = 300;

byte b = n; > error

byte b = (byte)n; > 강제형변환 but 숫자깨짐, 데이터손실

b = 44

double d = 1.4;

int i = (int)d; i = 1

(int)3.5 + 4 = 7

(double)4 + 4 = 8.000000

3) 작은 > 큰 : 업캐스팅, 프로모션, 자동형변환

형변환 연산자 (타입) 생략이 가능하나 적어주는 습관을 들이자

ex.

double d = 3.14 * 10; > d = 31.4

(double)5 + 3.5 = 8.5.

i + d > 앞에 (타입) 붙이는게 정석이지만 자동형변환 해줘서 생략 가능 > 가독성을 위해 써주는게 좋음

5 / 2 = 2

(double)5 / 2 = 2.5

5 / 2.0 = 2.5

4. 입력문

1) Systme.in : 키보드 장티를 직접 제어, 키 입력을 받는 표준 입력 스트림 객체

키보드입력 > System.in 입력스트림 > 바이트데이터 > 자바 응용프로그램 > 읽을 수 있는 문자로 변경

2) Scanner : 자바 패키지에서 제공하는 클래스

원하는 타입으로 변환해줌

키보드 입력 > System.in > 바이트데이터 > Scanner > 형변환된 데이터 > 자바응용프로그램

3) 사용방법

(1) import 문 작성 : Scanner 클래스가 있는 자바패키지 가져오기, Scanner 클래스 여기서 사용할거야 선언해주기 #import java.util,Scanner;

(2) Scanner 객체 생성

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

(3) 입력받기 (원하는 만큼) : Scanner 클래스는 사용자가 입력하는 키 값을 공백문자(" ", "\t", "\n")를 기준으로 분리하여 토큰 단위로 읽는다. ex. ab cd

# 입력 받는 주요 메서드

결과타입

메서드명

설명

String

next()

다음 토큰을 문자열로 가져온다

int

nextInt()

다음 토큰을 int 타입으로 가져온다

double

nextDouble()

다음 토큰을 double 타입으로 가져온다

boolean

nextBoolean()

다음 토큰을 boolean 타입으로 가져온다

String

nextLIne()

\n(엔터)를 포함하는 한줄을 전부 가져온다

(4) Scanner 객체 닫기

sc.close(); 한번 닫으면 다시 못염

 

package day02;

import java.util.Scanner;

public class Test11 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in); // 객체 생성을 하나만 하는 이유, 기능은 동일하기에 여러개 만들필요 없음, 메모리 차지함
		
		// 입력받기
		System.out.println("이름을 입력해주세요 : "); // console에 무엇을 입력해야하는지 메세지 띄우기
		String name = sc.nextLine(); // 입력받아서 name 변수에 입력받은 문자열 저장
		System.out.println(name); // 입력+저장이 잘 됐는지 name변수 출력해서 확인
		
		System.out.println("나이를 입력해주세요 : ");
		String age = sc.nextLine(); // 무엇을 적던 전부 문자열로 가져옴
		// int ageInt = (int)age; // String은 기본형(int..)으로 바로 형변환이 안된다. 참조형과 기본형은 호환이 안됨 
		int ageInt = Integer.parseInt(age); // String 변수 age를 int로 선언한 변수 ageInt로 형변환에서 넣기
		double ageDb = Double.parseDouble(age); // String > double
		System.out.println(age); // 입력받아서 age변수에 입력 받은 문자열 저장
		System.out.println("내년 당신의 나이는 " + (ageInt+1) + "살 입니다."); // age가 문자열이기 때문에 문자로 인식되서 입력됨
		
		
		
		
		sc.close();

	}

}