Java
[Java] 2. 변수와 타입
Empty_Bottle
2022. 5. 16. 02:35
2-1) 변수
- 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름
- 메모리에 값을 저장하고 싶다면 변수를 선언하고 변수에 값을 지정해야 함.
- JAVA에서는 하나의 변수에 하나의 값만 저장할 수 있다.
- 변수 선언
- 변수를 사용하기 위해서는 먼저 변수를 선언해야한다.
- 변수 선언은 변수에 어떤 타입의 데이터를 저장할 것인지, 변수의 이름은 무엇인지를 결정한다.- int age; => 정수(int)를 저장할 수 있는 age라는 이름의 변수 선언
- double value; => 실수(double)를 저장할 수 있는 'value'라는 이름의 변수 선언
- 변수 명명 규칙
- 첫 번째 글자는 문자이거나 '$', '_'이어야 하고 숫자로 시작할 수 없다.
- 영어 대소문자를 구분한다.
- 자바 예약어는 사용할 수 없다.
- 첫 문자는 영어 소문자로 시작하되 다른 단어가 붙는 경우 뒷 단어의 첫 글자는 대문자로.
- 문자 수(길이)의 제한은 없다.
※ 1~3번째 줄은 필수, 4는 관례. - 값 저장
- 변수에 값을 저장할 때에는 대입 연산자인 '='를 사용함. (수학 연산기호와는 조금 다름)
- 오른쪽의 값을 왼쪽의 변수에 저장한다는 의미.
- 변수에 값이 저장되지 않으면 변수는 생성되지 않음
- 변수 초기화: 변수에 최초로 값이 저장되는 것으로 이때 저장되는 값을 초기값이라 한다.
- int score; // 1. score이라는 이름의 변수는 int타입이다.
- score = 90; // 2. 90이라는 값을 score에 저장.
- int score=90; // 위의 두 줄을 한 줄로 표현.
- 변수 사용 범위
- 자바의 모든 변수는 중괄호{} 블록 내에서 선언되고 사용됨.
- 메소드 블록 내에서 선언된 변수인 로컬 변수는 그 내부에서만 사용되고 메소드 실행이 끝나면 사라짐. (초기화)
- 변수가 어떤 범위에서 사용될 것인지 생각하고 선언 위치를 결정해야 함.
2-2) 기본 타입
- 변수 타입
- byte< short< int< long< float< double 순으로 저장되는 값의 허용 범위가 크다.
- char 유형의 변수에는 한 글자의 문자만 저장 가능. ex. '가', 'a'
- String 타입은 문자열 저장 가능. ex. "가", "홍길동", "행 단위 출력"
- float 타입의 실수는 수의 맨 끝에 f나 F를 붙여 컴파일러가 float타입임을 알 수 있도록 해야 함.
- boolean 타입은 true 혹은 false를 의미하는 1byte 크기의 논리값을 변수에 저장할 수 있다.
= 조건문과 제어문의 실행 흐름을 변경하는데 사용. - 이스케이프 문자
- \t : 탭만큼 띄움
- \n : 줄 바꿈(라인 피드)
- - \r : 캐리지리턴
- - \" : " 출력
- \' : ' 출력
- \\: \출력
- \u16진수: 16진수 유니코드에 해당하는 문자 출력
2-3) 타입 변환
- 자동 타입 변환
- - 값의 허용범위가 작은 타입이 허용 범위가 큰 타입으로 저장된다.
- 정수형: byte< short< int< long
- 실수형: float< double
- 강제 타입 변환
- 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는 것.
- 방법: 작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입
- 정수 연산에서의 자동 타입 변환
- 정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환이 되어 연산을 수행함.
- 두 피연산자 중 허용 범위가 더 큰 타입으로 변환되어 연산이 수행된다.
- 실수 연산에서의 자동 타입 변환
- 산술 연산식에서 피연산자로 사용되는 두 실수 타입 변수가 동일한 타입이라면 해당 타입으로 연산되지만 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산을 수행하기 때문에 double 타입의 결과가 나옴.
- 원하는 타입의 계산 결과를 위해 계산 전 타입을 확인하는 것이 좋음.
- + 연산에서의 문자열 자동 타입 변환
- 피연산자가 모두 숫자일 경우에는 덧셈 연산을 수행
- 피연산자 중 하나가 문자열일 경우에는 나머지 피연산자들도 문자열로 자동 변환되어 문자열 결합 연산을 수행함. (문자열이 나열된다고 생각하기)
- 문자열을 기본 타입으로 강제 타입 변환
- String=>byte 강제 타입 변환 예시
- String str = "10";
// String 타입의 str은 10이라는 문자열을 가짐. - byte value = Byte. parseByte(str);
// (변환할 타입) (변수명) = (변환할 타입).parse(변환할 타입)(String 타입의 변수명)
- String str = "10";
- String=>byte 강제 타입 변환 예시
- 기본 타입의 값을 문자열로 변경
- String str = String.valueOf(기본 타입값);
// 기본 타입의 값을 String 타입의 str이라는 변수에 저장.
- String str = String.valueOf(기본 타입값);
2-4) 변수와 시스템 입출력
- 모니터로 변수값 출력하기
- System.out.println(리터럴 또는 변수);
// 시스템이 가지고 있는 출력 장치로 괄호 안의 내용을 출력하고 행을 바꿔라. - println(내용); => 괄호 안의 내용을 출력하고 행을 바꿔라.
- print(내용) => 괄호 안의 내용을 출력만 하라.
- printf("형식문자열", 값1, 값2...); =>괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라.
- 형식문자열: %[값의 순번] [-, 0] [전체 자리수] [소수 자리수] 변환 문자
- 값의 순번~소수 자리수는 생략 가능
- -는 생략하면 왼쪽 공백, 삽입하면 오른쪽 공백
- 0은 왼쪽 빈자리 0으로 채움
- 변환문자에는 d는 정수, f는 실수, s에는 문자열을 의미.
- 형식 문자열 (정수)
- %d : 123
- %6d : _ _ _123 (6자리 정수, 왼쪽 빈 자리 공백)
- %-6d : 123_ _ _ (6자리 정수, 오른쪽 빈 자리 공백)
- %06d : 000123 (6자리 정수, 왼쪽 빈 자리 0으로 채움)
- 형식 문자열 (실수)
: 소수점을 포함하여 자리수를 지정하므로 주의해야함.
ex. 10.2의 경우 소수점과 소수점 뒤 두 자리를 포함하여 10자리이므로 1234567.89와 같이 표시할 수 있다.- %10.2f : _ _ _ _ 123.45
- %-10.2f : 123.45_ _ _ _
- %010.2f : 0000123.45
- 형식 문자열 (문자열)
- %s : 문자열
- %6s: 6자리 문자열. 왼쪽 빈자리 공백
- %-6s: 6자리 문자열. 오른쪽 빈자리 공백
- 형식 문자열 (특수문자)
- \t : 탭(tab)
- \n : 줄 바꿈
- %% : %
- // ex) System.out.printf("이름: %s", "김자바");
=> 이름: 김자바
// ex) System.out.printf("나이: %d", 25);
=> 나이: 25
// ex) System.out.printf("이름: %1$s", "나이: %2$d", "김자바", 25);
=> 이름: 김자바, 나이: 25
- // ex) System.out.printf("이름: %s", "김자바");
- System.out.println(리터럴 또는 변수);
- 키보드에서 입력된 내용을 변수에 저장하기
- int keyCode = System.in.resd();
// 시스템이 가지고 있는 입력 장치에서 입력된 키코드를 읽은 값을 keycode에 int타입으로 저장하라.
키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없고 키보드로부터 입력된 내용을 통 문자열로 읽지 못함. - Scanner 클래스 사용
Scanner sc=new Scanner(System.in)
//sc라는 이름의 Scanner 타입의 변수를 선언하고 시스템의 입력 장치로부터 읽는 Scanner를 생성하고 변수에 저장.
String inputData = sc.nextLine();
// Enter를 입력하기 전까지 입력된 문자열을 String 타입의 inputData변수에 저장한다.
- Scanner 클래스를 사용하기 위해서는 'import java.util.Scanner;'가 클래스 바깥 영역에 있어야함.
=>Eclipse에서는 sc를 입력하고 ctrl+space bar를 입력하면 자동완성이 뜸.
=> 이 코드를 입력하지 않으면 Scanner를 찾을 수 없다는 컴파일 에러가 뜸.
- Scanner 클래스를 사용하기 위해서는 'import java.util.Scanner;'가 클래스 바깥 영역에 있어야함.
- int keyCode = System.in.resd();
* 기본 타입의 값이 동일한지 궁금할 때에는 '=='를 사용.* 문자열(String)이 동일한지 비교할 때에는 'equals'메소드 사용.
boolean result = inputData.equals("비교 문자열"); |
// 비교 문자열이 intputData에 저장된 문자열과 같은지에 대한 true or false 값을 result에 저장
실습도 해야하고 배운 내용 정리도 해야하고... 시간이 너무 빨라서 정신이 혼미함ㅜ