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

BELATED ARTICLES

more