본문 바로가기
Java/Java Basic

[Java Basic] 3. 화면 출력과 형 변환(Type Casting)

by Rosmary 2022. 6. 23.
728x90
반응형

 

 

 

프로그래밍 언어에서 화면에 글자를 출력하는 코드는 굉장히 직관적이다. Python의 경우 print() 함수, C언어는 stdio.h 파일에 포함된 printf() 함수를 사용함으로써 지정한 변수 값을 화면에 출력한다. 하지만 Java의 경우, 화면 글자 출력에 사용하는 함수 종류가 하나로 제한되지 않으며, 출력을 위해 작성하는 코드도 Python이나 C와 비교하면 조금 복잡한 편이다.

 

이번 포스팅에서는 Java에서 화면에 변수와 글자를 출력하는 함수에 대해서, 그리고 화면 출력 함수를 통해 변수의 형 변환이 일어나는 부분에 대해서도 확인해보려 한다.

 

 

1. Java 출력 함수

 

Java에서 화면 출력에 사용하는 함수는 크게 세 가지가 있다.

 

- print(변수 또는 "출력문자")

- printf(변수 또는 "출력문자")

- println(변수 또는 "출력문자")

 

단, 다른 프로그래밍과 달리 함수만으로는 출력이 어렵다. 이는 위의 함수가 System.out 이라는 클래스 내에 존재하고 있고, Java는 코드 작성 시, 함수가 포함된 클래스도 반드시 명시해주어야 하기 때문이다. 따라서 화면에 글자를 출력하기 위한 코드는 아래와 같이 작성해야 한다.

 

 

Eclipse에서 System.out을 입력하면 해당 클래스에 대한 설명이 나타난다.

 

 

Java는 Python과 C언어와 달리 출력 함수를 여러 개 가지고 있다. 용도에 따라 사용하는 출력 함수가 조금씩 다른데, 각 함수에 대해 지금부터 하나씩 알아보려 한다.

 

 

(1) System.out.print()

 

print() 함수는 단순히 인자로 지정된 변수나 문자(열)를 화면에 출력하는 함수다. Python의 print() 함수와 형태는 비슷하나 기능은 조금 다른데, Python의 print()가 출력 후 자동 개행까지 진행해주는 반면 Java는 자동 개행을 진행해주지 않는다. 따라서 아래와 같이 print() 함수를 연달아 작성하면, 화면 개행 없이 한 줄에 인자가 출력되는 것을 확인할 수 있다.

 

 

자동 개행을 위해서는 Enter에 해당하는 이스케이프 문자인 '\n'을 인자 마지막에 포함해주어야 한다.

 

 

print() 함수는 두 가지 단점이 있다. 개행을 위해 Enter에 해당하는 개행 문자를 반드시 문자열 내에 포함해야 한다는 것이 첫 번 째 단점이며, 문자열이 아닌 변수가 함수 인자로 지정되면 개행문자를 다른 print() 함수에 지정해야 하기 때문에 관리가 어려워진다는 것이 두 번 째 단점이다. 

 

 

(2) System.out.println()

 

println() 함수는 print()와 사용 방법이 동일한 출력함수다. 차이점은 자동 개행을 지원하지 않는 print()와 달리 자동 개행을 진행해준다는 것이다.

 

 

print() 함수의 예시와 달리 개행 이스케이프 문자(\n)가 없음에도 불구하고 println() 함수 사용 문자열/변수는 모두 개행이 진행된 것이 확인된다.

 

 

(3) System.out.printf()

 

printf() 함수는 print + format의 약자로 보면 된다. 이 함수는 특정 문자열 내에 변수값이 포함되어 출력해야 하는 경우 많이 사용한다. Python에서 문자열의 포맷팅과 비슷한 역할을 한다고 보면 된다. 아래의 예시를 보자. 

 

 

 age와 credit_grade 변수를 문자열과 함께 두 줄에 출력하는데 코드 4 줄이 작성되었다. 하지만 printf() 함수를 사용하면 이를 단 한 줄의 코드로 간략화할 수 있다.

 

 

위의 예시에서 문자열 내의 %d와 %c는 각각 정수형 변수와 문자형 변수의 위치를 지정하는 코드라 보면 된다. 그리고 해당 코드는 정수형 변수인 age와 문자형 변수인 credit_grade의 리터럴 값이 문자열 내 %d, %c를 대체한다. 즉, prinft의 경우 문자열과 변수를 동시에 사용해야 하는 경우에 유용하다. 

 

참고로 각 변수형 타입에 따라 문자열 내에 작성되는 코드는 아래와 같다.

 

-  문자형: %c

-  정수형: %d

-  실수형: %f

-  문자열:  %s

 

 

 

2. 형변환(Type Casting)

 

형 변환은 특정 변수의 변수형 타입을 변경하는 것이다. 굳이 지정한 변수 타입을 왜 변경하는걸까? 아래의 예시로 알아보자. 

 

정사각형의 둘레가 주어졌을 때, 정사각형의 한 변 길이는 "둘레 / 4"로 정의한다. 만약 Java를 통해 둘레 27 cm 인 정사각형의 한 변 길이를 구한다고 해보자. 아마 아래와 같이 코드를 작성할 수 있을 것이다.

 

 

정사각형 한 변의 길이를 출력하는 포맷팅 코드가 %d일 때, 한 변의 길이는 정수인 6으로 출력되는 것이 확인된다. 하지만 실제 한 변의 길이는 6.5 cm이기 때문에 필자는 이 값을 실수로 출력되도록 하고싶다. 하지만 포맷팅 코드를 %d에서 %f로 변경한 뒤 코드를 실행하면 아래와 같이 에러가 출력되는 것을 확인할 수 있다.

 

 

이유는 다음과 같다. 정수형끼리의 연산은 반드시 정수형으로 반환된다. 만약 동일한 변수 타입이 아니라 다른 변수형 타입끼리 연산이 일어나는 경우, 메모리 할당이 큰 변수형 타입에 맞게 결과가 반환된다. float은 4 Byte, byte는 1 Byte의 메모리 할당을 받기 때문에, 연산 결과를 float형으로 나타내기 위해서는 두 연산 값 중 하나를 float으로 변환해 줄 필요가 있다. 필자는 연산값인 4를 float으로 변환, 즉 형변환을 통해 이 문제를 해결하려 한다. 

 

 

위의 예시를 보면 정수형인 4 앞에 괄호 및 변경할 변수형 타입을 명시함으로써 형변환을 실시한 것을 알 수 있다. 따라서 27 / 4로 계산되는 것이 아니라, 27 / 4.000000 으로 계산되기 때문에 연산 결과도 소수로 반환되는 것이다. 

 

문자형 변수를 정수형 변수로 전환하는 것, 혹은 역방향 전환 역시 형변환을 사용하여 진행할 수 있다.

 

 

참고로 Python에 익숙한 분들이 형 변환 시 자주 하는 실수는 괄호의 위치다. Python에서는 형 변환 시 변수에 괄호를 적용하나 Java는 변수 타입형에 괄호를 적용하여 처음에 많은 실수가 나온다.  

 


 

다음 포스팅에서는 Java의 연산자에 대해 간략하게 알아보려 한다.

 

 

 

Fin.

 

 

반응형

댓글