본문 바로가기

Java

Java (타입 및 형 변환)

 

이 글에서는 기본적인 형과 형의 변환 부분을 집중적으로 살펴보겠다.

이미지 중 중요한 점을 간단히 설명하자면 char은 한 글자를 나타날 때 쓰며 ''를 사용하여 문자를 감싸준다, 다음으로 boolean은 참과 거짓만을 나타내는 형이다. 위와 같은 형을 정의하고 값을 입력할 시 주의할 점이 있다.

 

 

 

형 타입 주의 

 

1. float와 double의 차이

double d = 3.14123456789;
float f = 3.14123465789F; 

 

double과 float는 둘 다 실수형을 정의하는 값이지만 double이 더 범위가 넓다. 만일 float를 사용 시, double과의 차이점을 두어야하는데, 그것은 넣고자 하는 값이 F를 붙여야만 한다.

 

2. int와 long의 차이

int i = 10000000000000; int가 가질 수 있는 값을 벗어남
long l = 1000000000000L;

 

int의 정수 범위는 -2,147,483,648 ~ 2,147,483,647로 일정 범위가 넘어가게 되면 오류가 나타나게 된다. 이를 방지하기 위하여 long의 정수 형을 사용하는데, 이는 int보다 범위가 더 넓은 범위를 지니고 있다. 하지만 int와 double을 구분하기 위해서는 float와 마찬가지로 뒤에 L이라는 글자를 넣고자 하는 값에 덧불여야 한다.

 

참고로 short는 16비트로 표현되며, 범위는 -32,768에서 32,767까지의 정수 값을 저장할 수 있고 byte는 8비트로 표현되며, 범위는 -128에서 127까지의 정수 값을 저장한다.

 

+ 추가로 Intellij를 사용 시 주석 사용 팁은 아래와 같다

public class _04_Comment {
    public static void main(String[] args) {
        // 한 줄 주석 단축키 : Ctrl + /
        // 여러 줄 주석 단축키 : ctrl + Shift + /
    }
}

 

 

 

변수 명 짓는 법

변수 이름은 해당 변수가 저장하는 값 또는 역할과 관련하여 의미 있어야 한다.

 

  • 변수 이름에는 밑줄 (_) 또는 문자를 사용할 수 있으며 공백은 사용할 수 없다.
  • 변수 이름은 밑줄 (_) 또는 문자로 시작할 수 있지만, 하이폰 (-)이나 숫자로 시작하는 것은 허용되지 않는다.
  • 변수 이름이 여러 단어로 이루어진 경우, 첫 번째 단어는 소문자로 시작하고, 이후 단어의 첫 글자는 대문자로 쓴다.
  • 예약어 (예: public, static 등)는 변수 이름으로 사용해서는 안 된다.

다음의 예시를 통해 더욱 자세하게 알아보자

//입국 신고서 (여행)
String nationality = "대한민국"; // 국적
String firstName = "현성"; //이름
String lastName = "김"; // 성
String dataOfBirth = "2001-12-31"; // 생년월일
String residentialAddress = "무슨 호텔"; //체류지
String purposeOfVisit = "관광"; // 입국목적
String flightNumber = "KE657"; // 항공 편명
String _flightNo = "KE657"; // 밑줄 시작
String flight_No2 = "KE657"; // 밑줄과 숫자 포함
// String -flightNo = "KE657"; // 하이폰으로는 시작 불가

int accompany = 2; // 동반 가족 수
int lengthOfStay = 5; // 체류 기간

String item = "시계";
String item2 = "가방";
// String 3item = "전자제품" // 숫자로 시작되는 변수명은 안 됨

 

변수의 시작은 소문자로 시작되지만 그 다음에 이어지는 단어는 대문자로 시작되는 것을 알 수 있으며 , 주의할 점은 하이폰(-)과  숫자로 변수명은 시작이 안 되지만 밑줄(_)로 시작하는 것은 허용이 된다.

 

 

상수

상수는 말 그대로 바뀌지 않는 값을 나타날 떄 쓰이며 기본 정수형을 사용할 때 처럼, 선언 후 마음대로 바꿀 수 없다. 만일 시도하게 되면 오류가 발생하게 된다.

int number = 5;
    number = 10;

 

자바에서 상수는 final로 나타낸다 다음의 예시를 보게되면 바뀌지 않고 수정할 필요없는 값에 사용하는 것을 알 수 있다.

final double PI = 3.141592; // 원주율
final String DATE_OF_BIRTH = "2001-12-31"; 

 

 

형 변환

정수형에서 실수형으로, 실수형에서 정수형으로 바꾸는 법을 먼저 살펴보겠다.

// int to float, double
int score = 93;
System.out.println(score); //93
System.out.println((float) score); //93.0
System.out.println((double) score); //93.0

 

// float, double to int
float score_f = 93.5F;
double score_d = 98.8;
System.out.println((int)score_f); // 93
System.out.println((int) score_d); //98

 

int값의 변수 명은 괄호안에 삽입 뒤 앞에 변환하고자 하는 형 타입을 넣고. 실수형인 float와 double도 마찬가지로 한 뒤에 println을 하게 되면 바뀐 형 타입으로 배출하게 된다.

 

이러한 형 변환을 이용하여 단순 계산도 가능토록 한다. 변환하고 싶은 값에 형 타입을 괄호로 감싼 다음 앞에 표기하면 그에 맞는 형의 타입으로 변한다. 하지만 이는 큰 데이터 값에서 작은 데이터 값으로 변환 시의 과정(수동 형변환)시에만 적용되는 것으로 작은 데이터 값에서 큰 데이터 값으로 즉 int에서 double로 형 변환을 하는 경우 (자동 형변환) 같은 경우에는 형 타입을 앞에 표기할 필요가 없다.

// 정수 + 실수 연산
score = 93 + (int) 98.8;// 93 + 98
System.out.println(score); //191

// double score_d
score_d = 93 + 98.8; // 정수는 자동으로 double로 변환
System.out.println(score_d);

 

좀 더 자세히 알아보겠다.

int intValue = 93;
double doubleValue = 98.8;

double result = intValue + doubleValue; // 자동 형 변환 발생

 

위와 같은 경우는 자동 형 변환이 발생하여서 int형인 intValue 값은 따로 형 타입을 표기하지 않아도 된다. 하지만 

double doubleValue = 98.8;
int intValue = (int) doubleValue; // 수동 형 변환 필요

이러한 경우는 double이라는 큰 데이터 값에서 int라는 작은 데이터 값으로 변환되는 과정인 즉 수동 형변환 과정이므로 형 타입을 따로 표기를 해주어야 한다.

 

단순히 println하고 계산을 하는 것이 아닌 변수에 형 변환된 데이터를 집어 넣는 방식은 다음과 같다.

 

double convertedScoreDouble = score; // 191 -> 191.0
// int -> long -> float -> double (자동 형변환)

int convertedScoreInt = (int) score_d; // 191.8 -> 191
// double -> float -> long -> int (수동 형변환)

 

자동 형 변환은 더 큰 데이터 타입으로의 확장 변환이며, 수동 형 변환은 데이터 손실을 감수하고 더 작은 데이터 타입으로 축소 변환이라고 생각하면 편하다. 

 

위의 예시에선 score는 정수 형이고 score_d는 실수형이다. 코드를 보면 알 수 있듯이 자동 형 변환은 변환 시 대입하는 변수명 앞에 무엇을 대입하지 않아도 된다. 하지만 수동 형변환 같은 경우는 대입하는 변수 명 앞에 형 타입을 표기해야 한다

 

숫자에서 문자형을 변환하는 방법은 다음 코드와 같다.

String s1 = String.valueOf(93);
String s2 = String.valueOf(98.8);

 

정수인 93을 문자로, 98.8인 실수형을 문자로 바꾸었다. => 숫자를 문자열로 바꾸는 메서드는 String.ValueOf 이다.

 

이렇게 바뀐 문자형에서 숫자로 바꾸는 방법은 다음 코드와 같다.

s2 = Double.toString(98.8);

 

Double.toString 메서드를 사용하여 같은 실수를 다시 문자열로 변환한다. 정수도 마찬가지로 Integer.toString() 메서드를 사용하여 정수를 문자열로 변환할 수 있다.

 

하지만 보편적으로 문자형에서 숫자로 바꾸는 또 다른 방법인 parseInt() 및 parseDouble() 메서드가 더 많이 사용한다. 다음의 예시 코드를 보고 더 자세히 알아보겠다.

// 문자열을 int로 변환
String intString = "93";
int intValue = Integer.parseInt(intString); // 문자열 "93"을 int로 변환
    System.out.println("int 값: " + intValue); // 출력: int 값: 93

// 문자열을 double로 변환
String doubleString = "98.8";
double doubleValue = Double.parseDouble(doubleString); // 문자열 "98.8"을 double로 변환
System.out.println("double 값: " + doubleValue); // 출력: double 값: 98.8

 

Integer.parseInt() 및 Double.parseDouble() 메서드를 사용하여 문자열을 숫자로 변환하는 방법과 Integer.valueOf() 및 Double.valueOf() 메서드를 사용하는 방법 사이의 주요 차이는 parse 사용 시, 반환 값은 해당 숫자 타입의 원시 데이터 타입이지만 value.Of의 반환 값은 해당 숫자 타입의 객체로 반환하게 된다.

'Java' 카테고리의 다른 글

Java (배열)  (1) 2023.12.31
Java (이중 반복문)  (0) 2023.12.31
Java (각 반복문 종류와 응용)  (0) 2023.12.31
Java (문자열 메서드 및 이스케이프 문자)  (0) 2023.12.30
Java (연산자 정리)  (1) 2023.12.30