1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (187)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (27)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
      • TIL (1)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON
☕️ JAVA/WhiteShip Java LIVE Study

[WhiteShip Java LIVE Study] 2주차 : 자바 데이터 타입, 변수 그리고 배열

[WhiteShip Java LIVE Study] 2주차 : 자바 데이터 타입, 변수 그리고 배열
☕️ JAVA/WhiteShip Java LIVE Study

[WhiteShip Java LIVE Study] 2주차 : 자바 데이터 타입, 변수 그리고 배열

2020. 11. 20. 22:55

public class WsJavaLiveStudy
{
public static final GITHUB_URL = "https://github.com/whiteship/live-study";
public static final YOUTUBE_URL = "https://www.youtube.com/user/whiteship2000";
public static void main(String[] args)
{
System.out.println("아래 내용은 백기선님과 함께하는 Java 라이브 스터디 과제 내용입니다.");
System.out.println("Github 에서 주차별 과제 내용을 확인하실 수 있으며, 매주 토요일 오후 10시30분 Youtube에서 라이브로 피드백 받고있습니다.");
System.out.println("깃허브 주소 : %s", GITHUB_URL);
System.out.println("유튜브 주소 : %s", YOUTUBE_URL);
}
}
view raw WsJavaLiveStudy.java hosted with ❤ by GitHub

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

 

프리미티브 타입과 레퍼런스 타입


Java는 정적 타입의 언어로, 모든 변수들은 사용되기 전에 반드시 자료형과 함께 선언해주어야만 합니다.

예를 들어, int 자료형 변수 test는 아래와 같이 선언된 이후에 사용 가능합니다.

 

1
int test = 123;
cs

 

그리고 변수를 선언할때 사용되는 자료형은 기본형(Primitive type)과 참조형(Reference type) 두 가지로 나뉘는데, 기본형은 변수에 실제 값을 저장하고 참조형은 값이 저장되어있는 주소 값을 저장하는 것이 가장 큰 차이입니다.

 

  • 기본형 (Primitive type)
    • 실제 값을 저장
    • 기본형 변수간의 연산이 가능

 

  • 참조형 (Reference type)
    • 주소 값을 저장
    • 참조형 변수간의 연산이 불가능

 

 

프리미티브 타입 종류와 값의 범위 그리고 기본 값


기본형 자료형에는 모두 8가지 타입이 있는데, 크게 논리형, 문자형, 정수형, 실수형 4가지로 분류할 수 있습니다.

 

분류 타입 설명
논리형 boolean true 와 false 둘 중 하나만의 값을 갖는 논리형 자료형입니다.
8 bit, 1 byte 의 크기를 가지며, 기본값은 false 입니다.
문자형 char 16 bit, 2 byte 의 크기를 가지는 문자형 자료형입니다.
유니코드 값을 가지며 '\u0000' (0) ~ '\uffff' (65,535) 사이의 값을 가집니다.
기본값은 '\u0000' 입니다.
정수형 byte 8 bit, 1 byte 의 크기를 가지는 자료형입니다. 
-128 ~ 127 사이의 값을 가집니다. 기본값은 0 입니다.
short 16 bit, 2 byte 의 크기를 가지는 자료형입니다.
-32,768 ~ 32,767 사이의 값을 가집니다. 기본값은 0 입니다.
int 32 bit, 4 byte 의 크기를 가지는 자료형입니다.
-2^31 ~ 2^31 -1 사이의 값을 가집니다. 기본값은 0입니다.

Java 8 부터는 Integer 클래스에서 Unsigned 관련 메서드를 통해 오버플로우 등으로 인한 unsigned 변수와의 연산을 지원합니다.(예: compareUnsigned, divideUnsigned)
long 64 bit, 8 byte 의 크기를 가지는 자료형입니다.
-2^63 ~ 2^63 -1 사이의 값을 가집니다. 기본값은 0L입니다.

Java 8 부터는 Long 클래스에서 Unsigned 관련 메서드를 통해 오버플로우 등으로 인한 unsigned 변수와의 연산을 지원합니다.(예: compareUnsigned, divideUnsigned)
실수형 float 32 bit, 4 byte 의 크기를 가지는 실수형 자료형입니다.
실수값을 부동소수점 방식으로 저장합니다. 기본값은 0.0f 입니다.
7자리의 정밀도를 제공하며, 이는 10진수 기준 7자리의 수를 오차없이 저장할 수 있음을 의미합니다.

Oracle의 Java tutorial 문서에서는 정확도가 중요한 경우에는 이 자료형 대신 java.math.BigDecimal 을 사용할 것을 권장하고 있습니다.
double 64 bit, 8 byte 의 크기를 가지는 실수형 자료형입니다.
float 보다 두 배의 크기를 가져 double 이라고 한다네요. 기본값은 0.0d 입니다.
15자리의 정밀도를 제공합니다.

 

 

리터럴


리터럴을 이해하기 위해서는 Java에서 상수의 개념을 먼저 알아야합니다.

Java에서는 상수는 절대불변의 값을 저장하는 공간을 의미하는데, final 키워드를 사용해 변수와 상수를 구분하고 있습니다.

상수는 반드시 선언과 동시에 초기화해야하고, 그 이후에는 값을 변경하는 것이 허용되지 않습니다.

 

하지만, JDK 1.6 이후부터는 선언과 동시에 초기화하지 않아도 되며, 사용하기 전에만 초기화해도 됩니다.

 

1
2
3
4
5
// 변수 선언
int test = 123;
 
// 상수 선언 및 초기화
final int MAX_VALUE = 50;
cs

 

이렇게 Java에서 상수라는게 존재하는데, 위에서 선언한 MAX_VALUE 외에도 1, 99, 'H' 라는 값 역시 상수입니다.

그러나 위에서 상수를 '값을 한 번 저장하면 변경할 수 없는 저장 공간' 으로 정의하였기 때문에, 이를 구분짓기위해 상수를 리터럴 이라는 용어로 부르게 되었습니다.

 

 

변수의 스코프와 라이프타임


변수들은 선언된 위치에 따라 사용 가능한 범위를 가지는데, 그 범위를 스코프(Scope)라고 합니다.

그리고 변수의 스코프에 따라 다른 라이프 타임을 갖게됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class TestClass 
{
    /**
    * 클래스 변수
    *
    * Life Time : 클래스 처음 호출시점 ~ 프로그램 종료시점
    * Scope : 클래스가 인스턴스화 되지 않아도 사용 가능
    */
    public static int classVariable = 0;
 
    /**
    * 인스턴스 변수
    *
    * Life Time : 인스턴스 생성시점 ~ 본 객체를 참조하는 객체가 없어지는 시점
    * Scope : 클래스 내부 전체
    */
    public boolean instanceVariable = false;
 
    /**
    * 메서드의 매개변수
    *
    * Life Time : 메서드 호출시점 ~ 메서드 종료시점
    * Scope : 메서드 내부 전체
    */
    public void method (String parameter)
    {
        /**
        * 지역 변수
        *
        * Life Time : 중괄호 시작 ~ 중괄호 종료
        * Scope : 중괄호 내부
        */
        String localVariable = "";    
    }
 
}
Colored by Color Scripter
cs

 

 

타입 변환, 캐스팅 그리고 타입 프로모션


서로 다른 타입간의 연산을 수행하려면 연산을 수행하기 전에 서로의 타입을 일치시켜야 합니다.

이 때, 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 형변환 이라고 합니다.

 

그리고 형변환에는 캐스팅과 프로모션이 있는데, 설명에 앞서 기본형 자료형을 표현할 수 있는 숫자의 크기 순으로 나열하겠습니다.

 

byte short int long float double String

 

  • 캐스팅(Casting) : 명시적 형변환
    • 크기가 더 큰 자료형을 작은 자료형에 대입할 때, 작은 자료형을 명시해 강제로 변환하는 것을 의미
    • 1
      2
      long a = 100;
      int b = (int) a;
      cs
    • 위 코드를 수행하면, 더 큰 자료형의 값을 작은 자료형에 넣는 것이기 때문에 명시적으로 형변환을 해주어야합니다.

 

  • 프로모션(Promotion) : 자동 형변환
    • 크기가 작은 자료형을 더 큰 자료형에 대입할 때, 작은 자료형이 큰 자료형으로 자동으로 변환되는 것을 의미
    • 1
      2
      int a = 100;
      long b = a;
      cs
    • 위 코드를 수행하면, 별도의 캐스팅 없이도 형변환이 이루어져 a와 b는 각각 10, 10이 됩니다.

 

 

1차 및 2차 배열 선언하기


Java에서 배열은 선언 후 초기화 OR 생성을 해야하며 255차원까지 생성할 수 있습니다.

 

  • 선언 후 초기화
    • 배열의 크기를 지정할 수 없습니다.
    • 1
      2
      3
      4
      5
      // 1차원 배열 선언 후 초기화
      int[] intArr = {1, 2, 3};
       
      // 2차원 배열 선언 후 초기화
      int[][] 2dArr = {{1, 2, 3}, {4, 5, 6}};
      cs

 

  • 생성
    • 배열의 크기를 지정할 수 있습니다.
    • 1
      2
      3
      4
      5
      // 1차원 배열 생성
      int[] intArr = new int[3];
       
      // 2차원 배열 생성
      int[][] 2dArr = new int[2][3];
      cs

 

 

타입 추론, var


타입 추론

타입 추론은 컴파일러가 데이터의 타입이 무엇인지 추론하는 것을 의미하며, 대표적인 케이스로 제네릭(Generics)이 있습니다.

 

1
2
3
4
5
6
7
public class Test
{
    public static void main (String[] args)
    {
        Map<String, Object> map = new HashMap<>();
    }
}
Colored by Color Scripter
cs

 

위 코드에서 map 인스턴스를 생성할 때, Map의 제네릭으로 String과 Object를 제공해 이후 코드에서 이 map 인스턴스에 값을 넣을 때 String-Object 타입이 올 수 있음을 추론하게 해줍니다. 만약, 설정된 제네릭에 맞지 않는 타입을 넣게되면 오류가 발생하게 됩니다.

 

 

var

Java 10 부터 자바에서도 var 를 사용할 수 있게 되었습니다. Javascript의 var 와 동일한 역할을 합니다.

개인적으로 자바의 장점 중 정적 언어가 항상 꼽혔는데, var 도입은 약간 아쉬운 부분이 있습니다.

 

Java에서 var 를 사용할땐 아래 제약사항을 준수해야합니다.

  1. 로컬 변수여야만 합니다.
  2. 선언과 동시에 초기화해야합니다.

 

1
2
3
4
5
6
var a = 1;            // Legal
var b = 2, c = 3.0;   // Illegal: multiple declarators
var d[] = new int[4]; // Illegal: extra bracket pairs
var e;                // Illegal: no initializer
var f = { 6 };        // Illegal: array initializer
var g = (g = 7);      // Illegal: self reference in initializer
cs

 

 

1
2
3
4
5
6
7
8
9
var a = 1;                // a has type 'int'
var b = java.util.List.of(1, 2);  // b has type 'List<Integer>'
var c = "x".getClass();   // c has type 'Class<? extends String>' 
                          // (see JLS 15.12.2.6)
var d = new Object() {};  // d has the type of the anonymous class
var e = (CharSequence & Comparable<String>) "x";
                          // e has type CharSequence & Comparable<String>
var f = () -> "hello";    // Illegal: lambda not in an assignment context
var g = null;             // Illegal: null type
cs

 

 


참고 자료 :: Primitive Data Types (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

참고 자료 :: Java 10 Spec (https://docs.oracle.com/javase/specs/jls/se10/html/jls-14.html#jls-14.4)

참고 자료 :: Java 10 에서 var 제대로 사용하기 (https://dev.to/composite/java-10-var-3o67)

참고 자료 :: Java 10 에서 var 제대로 사용하기 2탄 (https://dev.to/composite/java-10-var-2-4f8a)

반응형
저작자표시 비영리 변경금지 (새창열림)

'☕️ JAVA > WhiteShip Java LIVE Study' 카테고리의 다른 글

[WhiteShip Java LIVE Study] 6주차 : 상속  (0) 2021.02.17
[WhiteShip Java LIVE Study] 5주차 : 클래스  (2) 2020.12.25
[WhiteShip Java LIVE Study] 4주차 : 제어문  (0) 2020.12.11
[WhiteShip Java LIVE Study] 3주차 : 연산자  (1) 2020.11.30
[WhiteShip Java LIVE Study] 1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가  (0) 2020.11.15
  • 목표
  • 학습할 것
  • 프리미티브 타입과 레퍼런스 타입
  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 리터럴
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var
  • 타입 추론
  • var
'☕️ JAVA/WhiteShip Java LIVE Study' 카테고리의 다른 글
  • [WhiteShip Java LIVE Study] 5주차 : 클래스
  • [WhiteShip Java LIVE Study] 4주차 : 제어문
  • [WhiteShip Java LIVE Study] 3주차 : 연산자
  • [WhiteShip Java LIVE Study] 1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
1HOON
1HOON

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.