백기선님의 스터디중 2주차 과제이다. github.com/whiteship/live-study/issues/2
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 · Issue #2 · whiteship/live-study
목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언
github.com
목표 : 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것 :
- 프리미티브 타입 종류와 값의 범위, 기본 값은 무엇일까?
- 프리미티브 타입과 레퍼런스 타입은 무엇일까?
- 리터럴이란 무엇일까?
- 변수 선언 과 초기화는 어떻게 하는걸까?
- 변수의 스코프와 라이프타임은 어떤 구조일까?
- 타입 변환과 캐스팅, 타입 프로모션이란 무엇일까?
- 1차 / 2차 배열 선언해보기
- 타입 추론, var
프리미티브란?
프리미티브 = Primitive = 기본
프리미티브를 한국어로 직역하면 '원초적인', '원시적인', '가장 기초적인' 등으로 설명할 수 있겠다.
이쯤에서 부터 벌써 감이 오듯이 프리미티브는 기초, 기본 등의 뜻을 가지고 있다. #1
(앞으로는 '프리미티브' 대신 '기본'이라는 단어를 사용하겠다.)
리터럴이란?
리터럴은 '소스코드의 고정된 값을 대표하는 용어'입니다.
영어단어를 한국어로 해석하면 '문자 그대로의'라는 뜻이 나옵니다. #3
int example = 100;
이러한 코드를 작성한다면 'example 이라는 변수에는 100이라는 리터럴이 들어있다.'라고 설명할 수 있습니다.
이때 리터럴은 변수 뿐만 아니라 상수에도 똑같이 사용됩니다.
기본적으로 자바에는 총 8가지의 기본형 타입이 있습니다 :
타입 | 기본값 | 메모리에 할당되는 크기 | 데이터 표현 범위 | |
논리형 | Boolean | false (0) | 1 byte | true (1), false (0) |
정수형 | Byte | 0 | 1 byte | -128 ~ 127 |
Short | 0 | 2 byte | -32,768 ~ 32,767 | |
Int (기본) | 0 | 4 byte | -2,147,483,648 ~ 2,147,483,647 | |
Long | 0L | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | Float | 0.0F | 4 byte | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
Double (기본) | 0.0 | 8 byte | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 | |
문자형 | Char | '\u0000' | 2 byte (유니코드) | 0 ~ 65,535 |
만약 데이터 표현 범위를 넘어가게 된다면 오류가 납니다. (초보자들에게 가장 많이 나는 에러의 2가지 요인은 세미클론(;)과 표현 범위 초과입니다.)
자바에는 기본형 타입 외에도 래퍼런스(참조)형 타입이 있습니다.
참조형 타입은 4가지로 나뉘어 집니다 :
- 클래스 타입
- 인터페이스 타입
- 열거 타입
- 배열 타입
참조형 타입은 말 그대로 참조한다는 뜻입니다. C언어를 배우신 분이라면 포인터를 생각하시면 되겠습니다.
참조를 할때 무엇을 참조하느냐, 메모리의 위치를 참조하여 보여준다는 뜻으로 생각하시면 되겠습니다.
자세한 내용은 다음에 글 하나 더 써서 올리겠습니다.
다음은 변수의 선언과 초기화 입니다.
변수를 선언한다는 것은 변수를 만든다고 생각하시면 됩니다.
int isint;
double isdouble;
지금 int형의 isint 라는 변수와 double형의 isdouble 라는 변수를 선언했습니다.
선언을 하면 변수를 만든다고 하였는데 변수를 모르실 분들을 위해 설명하자면 변수는 상자입니다.
초기화는 말 그대로 '초기'화 입니다. 처음으로 값을 넣어준다고 생각하시면 됩니다. (초기 값을 넣는다/지정해준다/대입한다/초기화시킨다)
isint = 9999;
isdouble = 9.9;
지금 우리는 isint 라는 변수에 9999라는 값으로 초기화시켜준겁니다. 또한 isdouble 라는 변수에 9.9라는 값으로 초기화 시켜주었습니다.
또한 선언과 초기화를 동시에 진행할 수도 있습니다.
boolean isbolean = False;
우리는 boolean형의 isbolean 이라는 변수를 선언하고 동시에 False라는 값으로 초기화까지 해준겁니다.
변수와 비슷한 것중에 상수라는 것이 있다. 변수는 값이 변한다면 상수는 변하지 않는다. 그렇다면 무엇이 비슷한가? 둘다 데이터를 담는 상자라는 점에서 같다. 상수의 예로는 원주율(pi)을 들 수 있다. 원주율은 변하지 않는다. 3.1415926535....
상수를 선언할 때에는 final을 붙이면 된다.
final int isfinalint;
final {{데이터형}} 데이터이름;
지금 우리는 isfinalint 라는 이름의 int형 상수를 만들었다. 이제 isfinalint의 초기값을 설정한다면 어떠한 연산을 하더라도 값을 변경시킬 수 없다. (여기서 헷갈리시는 분들이 있을 수 있는데, "내가 isfinalint를 1로 초기화 시키면 1로 초기화 되는거고, 2초 초기화 한다면 2로 초기화 되는것이 아닌가?" 하는 의문증 말이다. 상수는 프로그램이 '실행중'일때에 변하지 않는다. 혹여나 헷갈리실 분들을 위한 설명이다.)
이제 우리가 만든 변수의 스코프와 라이프 사이클에 대해 알아볼 차례입니다.
스코프는 범위입니다. 라이프 사이클은 한국어로 생명주기입니다. 생명주기는 생성되고, 제거될 때까지의 주기를 말합니다. 자바에서 변수의 스코프는 중괄호({}) 안 입니다. 중괄호 밖은 영향을 끼치지 않습니다. 변수의 생명은 중괄호가 시작되면 시작 되고, 중괄호가 끝나면 생명도 함께 끝납니다. 그렇기 때문에 중괄호 안에서만 의미가 있고, 사용됩니다. #7
우리는 처음에 자바의 기본형에 대해 배웠습니다. 요번 내용은 그에 심화라고 할 수 있습니다.
만약을 가정해 봅시다. 우리가 int를 사용하고 있었는데, 값이 22억이 넘는다면 int를 사용하지 못하고 에러가 발생하게 됩니다. 이때에는 형을 변환시켜야 합니다.
Java의 형 변환에는 2가지가 있습니다.
- 자동 형변환 (묵시적)
- 강제 형변환 (명시적)
자동 형변환(promotion)은 작은 데이터를 큰 상자에 넣을때 일어납니다. 자동 형변환을 하는 예로는 int형과 long형 데이터를 함께 연산하는 상황이 있습니다.
byte < short < int < long < float < double
(형 변환을 혀용하지 않는 경우도 있습니다.)
강제 형변환(casting)은 큰 상자에 있는 데이터를 작은 상자에 넣을때 사용됩니다. 큰 상자에 있는 데이터는 보통 작은 상자에 들어가지 않습니다. 그렇기 때문에 강제 형변환을 할 때에는 많은 주의가 필요합니다.
int isint = 1;
byte isbyte = (byte) isint;
강제형변환을 할 때에는 괄호안에 원하는 형을 넣어주면 됩니다. #8
이제 우리는 배열에 대하여 알아볼 것이다. 나는 배열을 '목록'이라고 표현할 수 있다. 배열은 자료형의 종류가 아니라 자료형의 집합이다. #10
배열의 여러가지 특성중 우리가 눈여겨 봐야하는 것은 '길이'에 관한 것이다. 배열을 선언하는 방법은 2가지가 있다.
int[] a = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
String[] names = new String[3];
names[0] = "김병재"
names[1] = "박민지"
names[2] = "황동주"
자세히 보면 위에서 했듯이 선언과 초기화를 동시에 하는 것과 둘을 따로하는 방법으로 나뉘듯 이도 같다.
3길이의 배열을 만든다면 시작은 0이고 끝은 2이다. 어쩄든 3개지 않습니까?
이제 2차원 배열을 알아볼 것이다. 2차원 배열은 1차원 배열 2개가 겹쳐져 있다고 생각하면 된다.
위의 표는 이렇게 생각하면 된다. islist 라는 길이 5만큼을 가진 배열에 각각 길이 7만큼을 가진 배열을 넣어주었다.
위 같이 생긴 배열은 이렇게 선언하면 된다.
int[] isint = new int[5][7];
또한 2차원 배열도 선언과 동시에 초기화 시킬수도 있다. #11
int[] isintlist = {{1, 2, 3}, {4, 5, 6}};
위의 isintlist 배열을 선언만 한다면 이렇게 될 것이다.
int[] isintlist = new int[2][3];
2차원 배열까지 정확히 이해하셨다면 2차원을 넘어 3차원, 4차원, 5차원도 만들 수 있겠다는 것을 알게될 것이다. 그런데 보통은 2차원 배열조차도 사용하는 경우가 별로 없다. 2차원 이상의 배열은 data science를 할때에 주로 사용된다. (참고하세요)
다음은 타입 추론이다.
타입추론이란? 데이터형을 직접 지정해주지 않아도 컴파일러가 알아서 해주는 것이다.
내가 아직 써보지 않아서 모르겠지만 타입추론은 크게 쓸데가 없을 듯 하다. 왜냐하면 그로인해 에러가 많이 날 것 같기 때문..ㅎ
타입추론 방식을 사용하려면 변수를 선언할 때 앞에 형 대신 var를 붙여주면 된다:
var idontknow = "Who am I"
이 코드는 idontknow라는 변수에 문자열을 넣었으니 데이터형식은 string일 것이다. #12
이분들 정말 정리 잘 해놓으셨더라구요 참고하세요. (출처이기도 함)
- www.ktword.co.kr/abbr_view.php?m_temp1=464
- gbsb.tistory.com/6
- www.youtube.com/watch?v=BpW4AgcZBQI
- blockdmask.tistory.com/355
- offbyone.tistory.com/98
- m.blog.naver.com/highkrs/220245599686
- catch-me-java.tistory.com/18
- stage-loving-developers.tistory.com/8
- coding-factory.tistory.com/130
- wikidocs.net/206
- keichee.tistory.com/423
- velog.io/@bk_log/Java-%ED%83%80%EC%9E%85-%EC%B6%94%EB%A1%A0
'spring' 카테고리의 다른 글
자바 스터디 3주차 4: Java 자바의 기초 연산자 알아보기!! 논리 연산자 (0) | 2021.04.28 |
---|---|
자바 스터디 3주차 3: Java 자바의 기초 연산자 알아보기!! 관계 비교 연산자 (0) | 2021.04.21 |
자바 스터디 3주차 2: Java 자바의 기초 연산자 알아보기!! 비트 연산자 (0) | 2021.04.13 |
자바 스터디 3주차 1: Java 자바의 기초 연산자 알아보기!! 산술 연산자 (0) | 2021.04.13 |
내가 작성한 자바 코드는 어떻게 실행되는 것일까?(JVM) (0) | 2021.03.25 |
댓글