Language/Java

데이터의 형태, 자료형

느낌표 공장장 2021. 1. 25. 23:56

정수형

데이터 타입 표현 범위 데이터 크기
byte -128 ~ 127 1 byte
short  -32,768 ~ 32,767 2 byte
int  -2,147,483,648 ~ 2,147,483,647 4 byte
long -0,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8 byte

다양한 정수형이 존재하는 이유는 큰 숫자가 필요할 때, 더 많은 공간이 필요했기 때문

✔︎ 정수형 계산 과정에서 long 타입이 포함되어있는 경우를 제외하면, 연산의 경우는 항상 int형이다.

public class Number {
    public static void main(String[] args) {
        byte byteInteger = 130;
        short shortInteger = 20;
        int intInteger = 30;
        long longInteger = 40;
		
        // 밑의 두 코드는 오류를 가지고 있음.
        short sum = byteInteger + shortInteger; // int 타입으로 선언해주어야함.
        int sum2 = intInteger + longInteger; // long 타입으로 선언해주어야함.
    }
}

실수형

데이터 타입 표현 범위 데이터 크기
float ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) 4 byte
double ±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d) 8 byte

float 형을 사용하기 위해서는 숫자 뒤에 F 혹은 f를 붙여주어야 한다. double의 경우는 딱히 표현 상의 제약은 없다.

public class NumberFloat {
    public static void main(String[] args) {
    
    	// 소수 뒤에 f를 붙이지 않으면 double이라고 인식하게 되어 오류가 발생함
        float floatNumberX = 1.2; // 오류 발생 코드
        
        
        float floatNumberO = 1.2f; // f를 붙여주어야한다.
        double doubleNumber = 4.3;
    }
}

 

★ 실수 표현의 한계 때문에 소수점 아래에서 아주 정확한 값을 표현하지 못한다.

public class NumberFloat {
    public static void main(String[] args) {
        float floatSum = 0.001f + 0.001f + 0.0001f;
        System.out.println(floatSum);
    }
}

출력 값 : 0.0021000002

이렇게 자바는 실수형 타입의 연산을 수행할 때 아주 정확한 값을 세밀하게 계산하지 못한다는 것을 알 수 있다.

그렇기 때문에 돈 계산과 같은 예민한 계산의 경우에는 (예를 들면 은행에서 사용하는 프로그램) 정수형 타입을 사용하는 것이 일반적.

정수형으로 연산을 수행한 후, 나눗셈을 통해서 스스로 바꾸어 준다.


문자형

문자 1개를 저장하는 자료형

데이터 타입 데이터 크기
 char 2 byte
public class Characters {
    public static void main(String[] args) {
        char character = 'o';
    }
}

문자열

1. 문자열은 더하기(+) 연산자를 통해 여러 개의 문자열을 이어 붙이는 것이 가능하다. 

(많이 사용된다. 로그인했을 때 "00님 반갑습니다!"와 같이 "아이디+님 반갑습니다!" )

public class StringExample {
    public static void main(String[] args) {
        String chicken = "치킨은 맛있어.";
        String pizza = "피자도 맛있어요.";
        
        String chickenAndPizza = chicken + pizza;
        System.out.println(chickenAndPizza);
    }
}

출력 값 : 치킨은 맛있어.피자도 맛있어요.

 

2. 문자열의 글자 수 세기

(비밀번호 길이 제한, 생년월일과 같이 자릿수가 고정되어 있는 데이터 입력, 자기소개서의 글자 수 셀 때 등)

// 변수명.기능
// stringName.length();

public class StringExample {
    public static void main(String[] args) {
        String chicken = "치킨은 맛있어.";
        System.out.println(me.length());
    }
}

출력 값 : 8

* 문자열 변수가 제공하는 기능을 사용할 때에는 문자열 변수 뒤에 ".length()"와 같이 점을 찍고 기능명 적고 괄호 열고 닫는 식으로 사용.

length는 글자 수를 세어서 되돌려 주는데(공백도 한글자로 셈) , 되돌아오는 글자 수의 자료형은 앞서 배운 int형이다.

 

기본적으로 length()라는 기능은 값을 돌려주는 기능이기 때문에, 문자열의 길이를 특정 변수로 받을 수 있다.

public class StringExample {
    public static void main(String[] args) {
        String chicken = "치킨은 맛있어.";
        int length = chicken.length();
        System.out.println(length);
    }
}

 

3. 문자열 일부 바꾸기

// stingName.replaceAll("바꿀 문자열", "새 문자열");

public class StringExample {
    public static void main(String[] args) {
        String chicken = "치킨은 맛있어.";
        String replaced = chicken.replaceAll("맛있어", "맛없어");
        System.out.println(replaced);
    }
}

출력 값 : 치킨은 맛없어.

 

4. 문자열 자르기

// stringName.substring(시작 위치, 끝위치(미포함));
// stringName.substring(시작 위치);

public class StringExample {
    public static void main(String[] args) {
        String birthday = "2021/01/01";
        String year = birthday.substring(0, 4);
        String day = birthday.substring(8);
        System.out.println("출생년도:" + year);
        System.out.println("출생일:" + day);
    }
}

출력 값 : 출생년도:2021
             출생일:01


논리형(boolean)

참(true) 또는 거짓(false)의 값(만)을 가지는 자료형. 

(유튜브 프리미엄 사용자이면 광고 없애고 아니면 광고)'

public class BooleanExample {
    public static void main(String[] args) {
        boolean trueValue = true;
        boolean falseValue = false;
        boolean question = 5>3;

        System.out.println(trueValue);
        System.out.println(falseValue);
        System.out.println(question);
    }
}

출력 값 : true / false / true


래퍼(wrapper) 타입

위의 자료형들은 문자열을 제외하면 원시 자료형이라고 부른다. 원시자료형은 순수하게 상수 형태로 표현할 수 있는 자료형으로 크기에 대한 제약을 가지고 있으며 추가적인 기능들이 제공되지 않는다.

 

문자열은 글자 수를 세거나 문자열을 잘라내는 등의 추가적인 기능이 있다. 자바는 숫자형이나 논리형에도 이런 기능을 제공하기 위해 래퍼 타입들을 제공한다. 

각 자료형의 첫 글자를 대문자로 사용하게 된다. (int는 Integer라는 조금 더 긴 이름을 가지게 된다.)

선언과 할당하는 방법은 원시 자료형과 비슷하다. 

public class WrapperTypes {
    public static void main(String[] args) {
        Integer integerNumber = 3;
        Long longNumber = 3L;
        Float floatNumber = 3.0f;
        Double doubleNumber = 3.0d;
        Boolean booleanValue = true;
        
        // 변환
        float floatChange = integerNumber.floatValue(); // 3.0f
        double doubleChange = integerNumber.doubleValue(); //3.0d
        String stringChange = integerNumber.toString(); // "3"
    }
}

이 자료형들의 주요 기능들로는 다른 정수형으로 변환해 주거나, 문자열로 변환해 주는 기능이 있다. 

크게 유용한 기능은 없음

 

 

 

유투브 "초간단 자바"님 영상을 통해 공부한 내용입니다 !
www.youtube.com/watch?v=X35QS65iI8w

'Language > Java' 카테고리의 다른 글

반복문  (0) 2021.03.30
조건문  (0) 2021.01.30
사용자 입력과 예외 처리  (0) 2021.01.26
연산자  (0) 2021.01.19
숫자, 문자, 주석 그리고 변수  (0) 2021.01.18