Week 02
2022. 6. 18. 22:00
728x90
목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1.프리미티브 타입 종류와 값의 범위 그리고 기본 값
기본형(Primitive)에는 총 8개의 타입이 있다. 논리형, 문자형, 정수형, 실수형으로 구분이 된다.
# 기본형
**1. 논리형: boolean**
-> true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.
**2. 문자형: char**
-> 문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있다
**3. 정수형: byte, short, int, long**
-> 정수를 저장하는데 사용되며, 주로 int가 사용된다. byte는 이진 데이터를 다룰 때 사용되며,
short는 C언어와의 호환을 위해서 추가되었다.
**4. 실수형: float, double**
-> 실수를 저장하는데 사용되며, 주로 double이 사용된다.
# 기본값
**1. boolean**
-> false
**2. char**
-> ‘₩u000’
**3. byte**
-> 0
**4. short**
-> 0
**5. int**
-> 0
**6. long**
-> 0L
**7. float**
-> 0.0f
**8. double**
-> 0.0d 또는 0.0
2.프리미티브 타입과 레퍼런스 타입
자료형은 크게 ‘기본형’과 ‘참조형’ 두 가지로 나눌 수 있는데, 기본형 변수는 실제 값을 저장하는 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖는다. 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.
# 프리미티브 타입과 레퍼런스 타입
**1.기본형**
-> 논리형, 문자형, 정수형, 실수형 계산을 위한 실제 값을 저장한다.
**2.참조형**
-> 객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입.
3.리터럴
컴퓨터 과학 분야에서 리터럴(literal)이란 소스 코드의 고정된 값을 대표하는 용어다.
# 리터럴
**1. 논리형**
-> false, true
**2. 정수형(접미사 L)**
-> 123, 0b0101, 077, 0xFF, 100L
**3. 실수형(접미사 f,d)**
-> 3.14, 3.0e8, 1.4f, 0x1.0p-1
**4. 문자형**
-> 'A', '1', '\\n'
**5. 문자열**
-> "ABC", "123", "A", "true"
4.변수 선언 및 초기화하는 방법
프로그래밍언어에서의 변수란, 값을 저장할 수 있는 메모리상의 공간을 의미한다.
# 변수 선언 및 초기화 방법
1. 선언 방법
-> ex) int age; // 변수타입 변수이름;
// age라는 이름의 변수를 선언
2. 초기화 방법
-> ex) age = 28 // 변수 age를 28이라는 값으로 초기화한다.
* 일반적으로 변수의 선언과 동시에 초기화를 한다.
-> ex) int age = 28; // 변수 age를 선언하고 28로 초기화한다.
5.변수의 스코프와 라이프타임
프로그램 내 변수에 접근할 수 있는 유효 범위를 스코프라고 하며, 유효 기간을 라이프타임이라고 한다.
# **스코프 (가시성,Visibility):프로그램 내 변수에 접근할 수 있는 유효 범위/영역**
-> 정의된 변수가 보이는 유효 범위
-> 통상, 변수 선언 이후부터 선언문이 속한 블록이 끝나는 부분까지임
(1**) 위치에 따른 스코프 구분**
1) 전역 변수(Global Variable) 또는 전역 스코프(Global Scope)
-> 블록(함수 등) 밖 전역 스코프에서 선언/정의/사용되는 변수
2) 지역 변수(Local Variable) 또는 지역 스코프(Local Scope) 또는 블록 스코프(Block Scope)
-> 블록(함수 등) 안 지역 스코프에서 선언/정의/사용되는 변수
**-> 함수의 매개변수도, 지역 변수 범주에 속하므로, 함수 내에만 접근 가능**
-> 만일, 전역 및 지역 변수의 명칭이 충돌하면, 지역 변수가 우선이 됨
(2) **시간에 따른 스코프 구분**
1) 정적 스코프 (정적 메모리 할당)
-> 컴파일러 **번역시**에(실행 전), 변수 영역이 결정됨
-> 함수를 정의할 때, 구문 해석만으로도, 어떤 변수가 그 함수 스코프에 있는지를 알 수 있음
-> 즉, 코드 작성 시점에 스코프가 결정됨
2) 동적 스코프 (동적 메모리 할당)
-> **실행시에만** 비로소 변수 영역이 결정
-> 함수를 실행할 때만, 비로소 어떤 변수가 그 함수 스코프에 있는지 알 수 있게 됨
# 라이프타임 (수명,Lifetime):변수가 기억장소에 할당된 시점부터 반환되는 시점까지의 시간
* 변수의 수명 구분
1) 자동 변수(Automatic Variable)
-> 프로그램 제어가 블록(함수 등) 내에 진입할 때 기억장소 할당이 되고,빠져 나갈 때 기억장소 해제가 일어남
2) 정적 변수(Static Variable)
-> 한 번 할당되면 프로그램 종료시까지 회수되지 않고 기억장소에서 살아 있는 변수
6.타입 변환, 캐스팅 그리고 타입 프로모션
타입 변환, 캐스팅, 타입 프로모션은 변수 또는 상수의 타입을 다른 타입으로 변환한다.
# 형변환
* 다만 각각의 차이는 조금씩 존재한다.
**1. 타입 변환**: 변수 또는 상수의 타입을 다른 타입으로 변환하는 것이다. 서로 다른 타입간의 연산을 하는 경우, 서로의 타입을 일치시켜야 하는데,
이렇게 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 타입 변환(= 형변환)이라고 한다.
**2. 캐스팅(자동 형변환)**: 크기가 더 작은 자료형을 더 큰 자료형에 대입할 때, 자동으로 작은 자료형이 큰 자료형으로 변환되는 현상이다.
ex) int a = 10 ;
float b = a ; // 범위가 작은 int형 변수 a를 범위가 큰 float형에 b에 저장할 때 자동 형변환
3. 프로모션(명시적 형변환): 크기가 더 큰 자료형을 더 작은 자료형에 대입할 때, 자료형을 명시해서 강제로 집어넣는 것.
ex) float a = 10.0f ;
int b = (int) a ; // 범위가 큰 float형 변수 a를 범위가 작은 int형 변수에 저장할 때는 명시해줘야 함
**자동 형변환이 가능한 방향**
byte(1)→short(2)→int(4)→long(8)→float(4)→double(8)
char(2)→int(4)
그렇다면 long 데이터 타입의 메모리 크기는 8byte이고, float 데이터 타입의 메모리 크기는 4byte인데, long 데이터 타입에서 float 데이터 타입으로 자동 형변환이 가능하다.
그 이유는 표현할 수 있는 값의 범위가 float이 더 크기 때문이다.
7. 1차 및 2차 배열 선언하기
배열이란 변수를 그룹으로 묶는 형태의 한 종류로서, 사물함 같은 형태를 가지고 있다. 하나의 배열 안에는 같은 종류의 값들만 저장될 수 있다.
# 1차 배열
한 줄만 존재하는 사물함 같이 구성된 배열이다.
행에 대한 개념은 없고, 열에 대한 개념만 존재하기 때문에
"배열이름.length"는 몇 칸인지를 알아보는 기능이 된다.
* 선언 방법
int[] grade = new int[3]; // 배열 생성
grade[0] = 75; // 값 초기화
grade[1] = 82; // 값 초기화
grade[2] = 91; // 값 초기화
*생성과 동시에 초기화도 가능함
int[] grade = {1, 2, 3, 4, 5, 6};
System.out.println(grade[0]);
=> 1 출력
# 2차 배열
1차 배열의 각 칸은 행을 이루고, 각각의 칸에 추가된 개별적인 배열이 '열'의 개념이 되어
행렬을 구성한다.
*선언 방법
int[][] grade = new int[3][4]; // 3*4 배열 생성
grade[0][0] = 75; // 값 초기화
grade[0][1] = 23; // 값 초기화
grade[0][2] = 64; // 값 초기화
grade[1][0] = 35; // 값 초기화
grade[1][1] = 67; // 값 초기화
*생성과 동시에 초기화도 가능함
int[][] numArr = {{1, 2, 3, 4, 5},{2, 3, 4, 5, 6}};
System.out.println(numArr[1][1]);
=> 3 출력
8.타입 추론, var
타입 추론이란 코드 작성 당시에는 타입이 정해져 있지 않았지만, 컴파일러 스스로가 타입을 유추하여 적용시키는 기능이며, 이 때 함께 쓰이는 키워드가 var다.
# 추론
자료형을 변수에 선언하지 않아도 변수 선언시 할당된 값을 보고
자동으로 타입이 추론될 수 있음
var a = 1234 // Int형으로 추론
var b = 1234L // Long형으로 추론
var c = 123.4 // Double형으로 추론
var d = 123.4f // Float형으로 추론
var e = true // Boolean형으로 추론
var h = 'a' // Char형으로 추론
'Java & Spring > WhiteShip Study' 카테고리의 다른 글
Week 06 (0) | 2022.07.16 |
---|---|
Week 05 (0) | 2022.07.09 |
Week 04 (0) | 2022.07.02 |
Week 03 (0) | 2022.06.25 |
Week 01 (0) | 2022.06.11 |