관리 메뉴

커리까지

[백기선] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 본문

자바

[백기선] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열

목표는 커리 2021. 10. 10. 14:24
728x90
SMALL

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

  • 프리미티브 타입은 기본형으로도 불리며 논리형과 숫자형 문자열형 등의 기본적인 데이터 타입이다.
  • 자바의 기본 타입으로서 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입이다.
값의 종류 기본 타입 메모리 사용 크기 저장되는 값의 범위
정수 byte 1 byte 8 byte -27 ~ (27 - 1)(-128 ~ 127)
char 2 byte 16 bit 0 ~ 216 -1(유티코드 \u0000 ~ \uFFFF, 0 ~ 65535)
short 2 byte 16 bit -215 ~ (215 -1)(-32,768 ~ 32,767)
int 4 byte 32 bit -231 ~ (231 -1)(-2,147,483,648 ~ 2,147,483,647)
long 8 byte 64 bit -263 ~ (263 - 1)
실수 float 4 byte 32 bit (+/-)1.4E-45 ~ (+/1)3.4028235E38
double 8 byte 64 bit (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308
논리 boolean 1 byte 8 bit true, false
  • byte 타입
    • 색상 정보 및 파일 또는 이미지 등의 이진데이터를 처리할 때 주로 사용
  • short 타입
    • 정수값을 저장할 수 있는 데이터 타입이며, C언어와의 호환을 위해 사용되며 비교적 자바에서는 잘 사용하지 않는다.
  • int 타입
    • 자바에서 정수 연산을 하기 위한 기본 타입이며 byte 타입 또는 short 타입의 변수를 + 연산하며 int 타입을 변환된 후 연산되고 연산의 결과 역시 int가 된다.
    • 그 이유는 자바에서 정수 연산을 4byte로 처리하기 때문이다.
  • long 타입
    • 수치가 큰 데이터를 다루는 프로그램에서는 long 타입이 필수적으로 사용되며, 대표적인 예가 은행 및 우주와 관련 프로그램 들이 있다.
    • long 타입의 변수를 초기화 할 때에는 정수값 뒤에 소문자 'l'이나 대문자 'L'을 붙일 수 있다.
    • 4byte 정수 데이터가 아니라 8byte 정수임을 컴파일러에게 알려주기 위해서다.
    • int 타입의 범위를 넘어가는 경우 소문자 'l' 혹은 대문자 'L'을 붙여야 에러가 나지 않기에 반드시 붙여줘야 한다.
  • 실수 타입(float, double)
    • 메모리 사용 크기에 다라 float, double로 나뉜다.
  • 논리 타입(boolean)
    • 두 가지 상태값을 저장할 필요성이 있을 경우 사용한다.
    • 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 주로 이용한다.

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

  • 자바 변수의 데이터 타입에는 프리미티브 타입과 레퍼런스 타입이 존재한다.
  • 프리미티브(기본형 변수)는 언어에서 사전 정의 되어있는 데이터 타입이며 레퍼런스 타입(참조형 변수)는 프리미티브의 wrapper객체로서 object를 상속한 개체형으로 나타난다.

기본형 변수

  • 실제 값을 저장

참조형 변수

  • 어떤 값이 저장되어 있는 주소를 값으로 가짐

  • 프로그래머가 직접 만들어 추가할 수 있어서 그 개수가 정해져 있지 않다.

  • 참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 변수의 타입이 된다.

  • 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 것이 된다.

  • 선언 방법

    • 클래스 이름 변수명; Date today;
    • Date 클래스 타입의 참조변수 today를 선언하기

      • Date today = null;
        or
        Date today = new Date();
      • 참조형 변수는 null 또는 객체의 주소를 값으로 갖고 참조변수의 초기화는 위와 같이 한다.

    • 객체를 생성하는 연산자 new의 ㅅ연산결과는 생성된 객체의 주소이며 이 주소가 대입연사자(=)에 의해 참조변수 today에 저장되고 참조변수 today를 이용해 생성된 객체를 사용할 수 있다.

  • 자바는 C언어와 달리 String을 제외한 참조형 변수 간의 연산이 불가능하므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.

리터럴

  • 프로그램에서 직업 표현한 값으로 소스 코드의 고정된 값을 대표하는 용어이다.
  • 종류는 정수, 실수, 문자, 논리, 문자열 리터럴이 있다.

정수 리터럴

  • 10진수, 8진수, 16진수, 2진수 리터럴이 있다.

  • int a = 15;
    int b = 015;
    int c = 0x15;
    int d = 0b0101;
  • 15 -> 10진수 리터럴 15
    015 -> 0으로 시작하면 8진수, 십진수값으로 13을 출력
    0x15 -> 0x로 시작하면 16진수, 십진수값으로 21을 출력
    0b0101 -> 0b로 시작하면 2진수, 십진수값으로 5를 출력

실수 리터럴

  • 소수점 형태나 지수 형태로 표현한 값이며 double로 컴파일 되지만 숫자 뒤에 f(float) 혹은 d(double)을 명시적으로 붙이기도 한다.

  • double f = 0.1234;
    double g = 1234E-4;
  • float는 반드시 f를 붙여줘야 하고 double는 생략가능하다.

  • float h = 0.1234f;
    double i = .1234D;

문자 리터럴

  • 단일 인용부호('')로 문자를 표현한다.

  • char a = 'H';
    char b = "한";
    char c = \uae00;(유니코드값) (\u다음에 4자리 16진수로, 2바이트의 유니코드(Unicode))

문자열 리터럴

  • 문자열은 기본타입이 아니며, ("")로 문자열을 표현한다.

  • String lter = "JAVA";
    lter + 26 = "lter26"(문자열 출력)

논리 타입 리터럴, 외 리터럴

  • boolean 타입 변수에 치환하거나 조건문에 이용한다.

  • boolean a = true;
    boolean b = 10 >0; (여기선 b값이 true)
    boolean c = 0; (c언어와 달리 boolean 타입으로 1,0을 참, 거짓으로 사용 불가)
  • null 리터럴은 레퍼런스에 대입해서 사용한다.

  • 기본타입에는 사용이 불가하고 String 같은 경우에는 사용가능하다.

  • int a = null(에러 발생)
    String str = null;
    str = "JAVA"

변수 선언 및 초기화하는 방법

변수 선언하기
public class TestObject {
    int number;
    String name;
}

변수 초기화 하기

public class TestObject {
    int number = 123;
    String name = "test"
}

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

변수의 스코프

  • 변수에 접근하거나 접근할 수 있는 유효 범위/ 영역이다.
    • 일반적인 규칙은 변수가 선언된 블록내에서만 엑세스 할 수 있다는 것이다.
    • 블록은 왼쪽 중괄호 {로 시작하고 오른쪽 중괄호 }로 끝난다.

변수의 라이프 타임

  • 변수가 메모리에서 살아있는 기간을 말한다.

Instance Variables

  • 정의
    • 클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
  • scope
    • 정적 메서드를 제외한 클래스 전체
  • 라이프타임
    • 객체가 메모리에 남아있을 때까지
  • 예시

예시

Class Variables

  • 정의
    • 클래스 내부, 모든 블록 외부에서 선언되고 static으로 표시된 변수
  • scope
    • 클래스 전체
  • 라이프타임
    • 프로그램이 끝날때까지 또는 클래스가 메모리에 로드 되는 동안
  • 예시

예시2

Local Variables

  • 정의
    • 인스턴스 및 클래스 변수가 아닌 모든 변수
  • scope
    • 선언된 블록 내에 있음
  • 라이프타임
    • 컨트롤이 선언 된 블록을 떠날때까지
  • 예시

예시3

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

타입변환

  • 데이터 타입을 다른 데이터 타입으로 변환하는 것이다.
  • 타입변환에는 두 가지 종류가 있다.
    • 자동(묵시적) 타입 변환
    • 강제(명시적) 타입 변환

캐스팅

  • 강제적으로 큰 데이터를 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것을 강제 타입 변환(Casting)이라고 한다.
  • 예시
int testIntValue = 123456789;
byte textByteValue = (byte) testIntValue; // 강제 타입 변환 (캐스팅)

double doubleTestValue = 3.14;
int textIntValue = (int) doubleTestValue; // textIntValue는 정수 부분인 3만 저장한다.

타입 프로모션

  • 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것이다.
  • 자동 타입 변환은 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생한다.
  • 프로모션의 경우엔 변환 이전의 값과 변환 이후의 값이 동일한다.
byte byteTestValue = 10;
int intTestValue = byteTestValue; // 자동 타입 변환이 일어난다.

1차 및 2차 배열 선언하기

배열

  • 동일 타입의 값을 여러개 취급할 수 있는 기능이다.
  • 인덱스라고 불리는 []로 감싼 0부터 시작하는 정수를 사용하여 배열의 길이나 순서를 나타낼 수 있다.
  • 타입에 따라 디폴트 값으로 채워진다.
    • 참조 : null
    • float, double : 0.0
    • bool : false
    • char : \u0000

1차 배열 선언

int []array = new int[10];
  • 초기 값이 {0,0,0,0,0,0,0,0,0,0} 과 같이 0으로 10개 값이 초기화된다.

1차 배열에 값 넣기

int[] array = new int[5];
array[0] = 1;
array[1] = 3;
array[2] = 6;
array[3] = 1;
array[4] = 1;

2차 배열 선언

int [][]array = new int[10][10];

2차 배열에 값 넣기

int [][]array = new int[5][5];
array[0][0] = 1;
array[0][1] = 12;
array[0][2]= 2;
array[1][0] = 1;
array[2][0] = 1;
...

타입 추론, var

  • Java 10에서 var 라는 Local Variable Type-Inference가 추가 되었다.
  • 타입추론
    • 정적 타이핑을 지원하는 언어에서, 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능이다.
    • 즉, 타입을 명시하지 않아도 된다는 뜻이고 이것은 코드량을 줄이고 코드의 가독성을 높일 수 있다.
  • 기존 자바는 일반 변수에 대해 타입추론이 지원되지 않고, generics와 lambda식에 대해서만 타입 추론을 지원하고 있었다.
  • 다이아몬드 연산자를 같이 사용하면 어떤 데이터 타입이 들어오는지 확인하기 어려워 컴파일 에러가 발생한다.

지원예시

var name = "test";
  • 자바 9 이하

    • String name = "test";
  • 자바 10 이상

    • var name = "test";

참고

https://devjun.tistory.com/54

https://hggggggk.wordpress.com/2013/07/04/%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C2-primitive-type%EA%B3%BC-reference-type%EC%9D%98-%EC%B0%A8%EC%9D%B4/

https://mine-it-record.tistory.com/100

https://league-cat.tistory.com/410

https://league-cat.tistory.com/411

https://devjun.tistory.com/57

https://league-cat.tistory.com/413

728x90
LIST
Comments