Created date: Wed, 20 Jul 2022 13:53 KST
자바에서는 변수를 어떻게 활용할까요?
안녕하세요. shcDE입니다. 이번 포스팅을 시작으로 자바 기본 사용법에 대한 내용을 다루고자 합니다. 사실 자바에 대한 포스팅을 하게 된 계기는 주변을 보면 자바를 어렵게 생각하시는 분들이 많아서 어떻게 하면 자바를 좀 더 효율적으로 배울 수 있을까에 대한 고민을 하게 되었습니다. 저 또한, 프로그래밍을 학부 시절에 처음 접했을 때, 자바로 언어를 시작해서 처음에는 프로그래밍에 대해 많은 어려움이 있었던 것 같습니다. 하지만 확실히 파이썬을 어느 정도 공부한 이후에 자바를 다시 접하니, 처음 자바를 접했을 때 보다 더 효율적으로 접근할 수 있었던 것 같습니다. 그래서 제가 공부한 내용을 복습함과 동시에, 책으로 공부할 때 어렵게 느끼실 수 있는 분들을 위하여 소스코드를 정리하도록 하겠습니다.
이번 포스팅에서는 자바에서 변수에 대해 정리하고자 합니다. 시작 전에, 해당 포스팅은 직접 ‘자바의 정석(3판)’을 구매하여 2장을 공부한 내용을 정리한 자료임을 밝힙니다. 추가로, 사용한 IDE는 ‘인텔리제이 IDEA CE’임을 밝히며, 실제 해당 포스팅의 코드를 그대로 사용하시면 작동이 안 될 수 있으니, 반드시 프로젝트 생성 후 제 소스코드 내에서 클래스 부분 내부에 있는 코드만 참고하여 학습하시길 권장드립니다. 해당 코드를 그대로 사용하실 경우, 작동이 안 될 수 있으니 참고해주시면 감사하겠습니다. 그럼 지금부터 포스팅 진행하겠습니다.
우선 두 개의 변수 age와 year를 선언한 다음, 값을 저장하고 출력하는 간단한 예제를 살펴보겠습니다.
- ● 예제 2-1
public class HelloWorldPrint {
public static void main(String[] args) {
int year = 0;
int age = 14;
System.out.println(year);
System.out.println(age);
year = age + 2000;
age = age + 1;
System.out.println(year);
System.out.println(age);
}
}
0
14
2014
15
Process finished with exit code 0
이 예제에서는 우선 year와 age라는 변수를 int를 통해 정수로 선언하였음을 확인할 수 있습니다. 그 이후에, 두 변수의 값을 0과 14로 선언하고, 출력하였음을 확인할 수 있습니다.
그 다음으로, year를 age + 2000, age를 age + 1로 다시 선언하고 출력한 결과, 2014, 15가 0과 14 이후에 추가로 출력된 것을 확인할 수 있습니다.
다음 예제는 두 변수의 값을 서로 바꾸는 예제입니다.
- ● 예제 2-2
public class HelloWorldPrint {
public static void main(String[] args) {
int x = 10;
int y = 20;
int tmp = 0;
System.out.println("x:"+ x + " y:" + y);
tmp = x;
x = y;
y = tmp;
System.out.println("x:"+ x + " y:" + y);
}
}
x:10 y:20
x:20 y:10
Process finished with exit code 0
이 예제를 보면 tmp라는 값을 추가로 선언하여 x와 동일한 값을 저장하고, x 값을 y 값으로 바꾸고, y 값을 처음에 저장한 tmp값(=초기 x 값)으로 바꾸는 과정을 통해 두 값을 서로 뒤바꾸는 프로세스를 확인할 수 있습니다. 이를 통해 변수 값을 지정하는 방법을 다른 방식으로 접근해봤습니다.
다음으로 변수의 타입을 변환하여 출력하는 예제를 확인하겠습니다.
- ● 예제 2-3
public class HelloWorldPrint {
public static void main(String[] args) {
String name = "Ja" + "va";
String str = name + 8.0;
System.out.println(name);
System.out.println(str);
System.out.println(7 + " ");
System.out.println(" " + 7);
System.out.println(7 + "");
System.out.println("" + 7);
System.out.println("" + "");
System.out.println(7 + 7 + "");
System.out.println("" + 7 + 7);
}
}
Java
Java8.0
7
7
7
7
14
77
Process finished with exit code 0
위 예제를 통해 문자열을 덧셈 연산자를 이용하여 결합할 수 있음을 출력된 ‘Java’, ‘Java8.0’을 통해 알 수 있습니다. 그리고 System.out.println("" + 7 + 7);
을 통해 ““를 앞에 선언하고 정수를 입력하면 문자열로 변환되어 결합될 수 있음을 확인할 수 있습니다.
다음은 printf() 명령어를 통해 형식화된 출력을 할 수 있게 도와주는 지시자의 대표적인 리스트입니다.
해당 지시자를 활용한 두 개의 예제 소스코드는 다음과 같습니다.
- ● 예제 2-4
public class HelloWorldPrint {
public static void main(String[] args) {
byte b = 1;
short s = 2;
char c = 'A';
int finger = 10;
long big = 100_000_000_000L; // long big = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL ;
int octNum = 010; // 8진수 10, 10진수로는 8
int hexNum = 0x10; // 16진수 10, 10진수로는 16
int binNum = 0b10; // 2진수 10, 10진수로는 2
System.out.printf("b=%d%n", b);
System.out.printf("s=%d%n", s);
System.out.printf("c=%c, %d %n", c, (int)c);
System.out.printf("finger=[%5d]%n", finger);
System.out.printf("finger=[%-5d]%n", finger);
System.out.printf("finger=[%05d]%n", finger);
System.out.printf("big=%d%n", big);
System.out.printf("hex=%#x%n", hex); // '#'은 접두사(16진수 0x, 8진수 0)
System.out.printf("octNum=%o, %d%n", octNum, octNum);
System.out.printf("hexNum=%x, %d%n", hexNum, hexNum);
System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);
}
}
b=1
s=2
c=A, 65
finger=[ 10]
finger=[10 ]
finger=[00010]
big=100000000000
hex=0xffffffffffffffff
octNum=10, 8
hexNum=10, 16
binNum=10, 2
- ● 예제 2-5
public class HelloWorldPrint {
public static void main(String[] args) {
String url = "www.codechobo.com";
float f1 = .10f;
float f2 = 1e1f;
float f3 = 3.14e3f;
double d = 1.23456789;
System.out.printf("f1=%f, %e, %g%n", f1, f1, f1);
System.out.printf("f2=%f, %e, %g%n", f2, f2, f2);
System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);
System.out.printf("d=%f%n", d);
System.out.printf("d=%14.10f%n", d); // 전체 14자리 중 소수점 10자리
System.out.printf("[12345678901234567890]%n");
System.out.printf("[%s]%n", url);
System.out.printf("[%20s]%n", url);
System.out.printf("[%-20s]%n", url); // 왼쪽 정렬
System.out.printf("[%.8s]%n", url); // 왼쪽에서 8글자만 출력
}
}
f1=0.100000, 1.000000e-01, 0.100000
f2=10.000000, 1.000000e+01, 10.0000
f3=3140.000000, 3.140000e+03, 3140.00
d=1.234568
d= 1.2345678900
[12345678901234567890]
[www.codechobo.com]
[ www.codechobo.com]
[www.codechobo.com ]
[www.code]
Process finished with exit code 0
화면에서 변수를 입력받게 해주는 Scanner 클래스 사용 예시는 다음과 같습니다.
- ● 예제 2-6
import java.util.*; // Scanner를 사용하기 위해 추가
public class HelloWorldPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("두 자리 정수를 하나 입력해주세요.>");
String input = scanner.nextLine();
int num = Integer.parseInt(input); // 입력받은 문자열을 숫자열로 변환
System.out.println("입력내용 :"+input);
System.out.printf("num=%d%n", num);
}
}
두 자리 정수를 하나 입력해주세요.>22
입력내용 :22
num=22
Process finished with exit code 0
여기에서 숫자가 아닌 문자 또는 기호를 입력하거나, 공백을 입력하면 Integer.parseInt()
가 나타나는 것에 유의해주시기 바랍니다.
다음은 문자의 유니코드를 알아내는 코드에 대한 예시입니다. char로 지정된 문자열을 int로 변환시키는 과정을 보여주고 있습니다.
- ● 예제 2-7
public class HelloWorldPrint {
public static void main(String[] args) {
char ch = 'A'; // char ch = 65;
int code = (int)ch; // ch에 저장된 값을 int 타입으로 변환하여 저장한다.
System.out.printf("%c=%d(%#X)%n", ch, code, code);
char hch = '가'; // char hch = 0xAC00;
System.out.printf("%c=%d(%#X)%n", hch, (int)hch, (int)hch);
}
}
A=65(0X41)
가=44032(0XAC00)
Process finished with exit code 0
특수문자를 활용하는 예시는 다음과 같습니다.
- ● 예제 2-8
public class HelloWorldPrint {
public static void main(String[] args) {
System.out.println('\''); // '''처럼 할 수 없다.
System.out.println("abc\t123\b456"); // \b에 의해 3이 지워진다.
System.out.println('\n'); // 개행(new line)문자 출력하고 개행
System.out.println("\"Hello\""); // 큰 따옴표를 출력하려면 이렇게 한다.
System.out.println("c:\\");
}
}
'
abc 12456
"Hello"
c:\
Process finished with exit code 0
다음으로 정수형을 다루는 예시를 가져오겠습니다. 이 예제에서는 short 타입과 char 타입의 최대값과 최소값에 1을 더하거나 뺀 결과를 출력하였습니다.
- ● 예제 2-9
public class HelloWorldPrint {
public static void main(String[] args) {
short sMin = -32768;
short sMax = 32767;
char cMin = 0;
char cMax = 65535;
System.out.println("sMin = " + sMin);
System.out.println("sMin-1= " + (short)(sMin-1));
System.out.println("sMax = " + sMax);
System.out.println("sMax+1= " + (short)(sMax+1));
System.out.println("cMin = " + (int)cMin);
System.out.println("cMin-1= " + (int)--cMin);
System.out.println("cMax = " + (int)cMax);
System.out.println("cMax+1= " + (int)++cMax);
}
sMin = -32768
sMin-1= 32767
sMax = 32767
sMax+1= -32768
cMin = 0
cMin-1= 65535
cMax = 65535
cMax+1= 0
Process finished with exit code 0
float과 double 변수는 다음과 같이 활용할 수 있습니다.
- ● 예제 2-10
public class HelloWorldPrint {
public static void main(String[] args) {
float f = 9.12345678901234567890f;
float f2 = 1.2345678901234567890f;
double d = 9.12345678901234567890d;
System.out.printf(" 123456789012345678901234%n");
System.out.printf("f : %f%n", f); // 소수점 이하 6째자리까지 출력
System.out.printf("f : %24.20f%n", f);
System.out.printf("f2 : %24.20f%n", f2);
System.out.printf("d : %24.20f%n", d);
}
}
123456789012345678901234
f : 9.123457
f : 9.12345695495605500000
f2 : 1.23456788063049320000
d : 9.12345678901234600000
Process finished with exit code 0
다음 예제는 float 타입의 값이 실제로 어떻게 저장되는지 직접 확인하기 위해 작성되었습니다.
- ● 예제 2-11
public class HelloWorldPrint {
public static void main(String[] args) {
float f = -9.1234567f;
int i = Float.floatToIntBits(f);
System.out.printf("%f%n", f);
System.out.printf("%X%n", i); // 16진수로 출력
}// main의 끝
}
-9.123457
C111F9AE
Process finished with exit code 0
이제 마지막으로 형변환에 대해 알아보겠습니다. 형변환이란 연산을 수행하기 전에 타입을 일치시켜야 하는 경우, 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 의미합니다. 형변환 기본 예제는 다음과 같습니다. 여기에서는 double과 int에 대하여 형변환을 진행하였습니다.
- ● 예제 2-12
public class HelloWorldPrint {
public static void main(String[] args) {
double d = 85.4;
int score = (int)d;
System.out.println("score="+score);
System.out.println("d="+d);
}
}
score=85
d=85.4
Process finished with exit code 0
정수형 간의 형변환에 대한 예시는 다음과 같습니다.
- ● 예제 2-13
public class HelloWorldPrint {
public static void main(String[] args) {
int i = 10;
byte b = (byte)i;
System.out.printf("[int -> byte] i=%d -> b=%d%n", i, b);
i = 300;
b = (byte)i;
System.out.printf("[int -> byte] i=%d -> b=%d%n", i, b);
b = 10;
i = (int)b;
System.out.printf("[byte -> int] b=%d -> i=%d%n", b, i);
b = -2;
i = (int)b;
System.out.printf("[byte -> int] b=%d -> i=%d%n", b, i);
System.out.println("i="+Integer.toBinaryString(i));
}
}
[int -> byte] i=10 -> b=10
[int -> byte] i=300 -> b=44
[byte -> int] b=10 -> i=10
[byte -> int] b=-2 -> i=-2
i=11111111111111111111111111111110
Process finished with exit code 0
실수형 간의 형변환은 다음의 예시를 통해 확인할 수 있습니다.
- ● 예제 2-14
public class HelloWorldPrint {
public static void main(String[] args) {
float f = 9.1234567f;
double d = 9.1234567;
double d2 = (double)f;
System.out.printf("f =%20.18f\n", f);
System.out.printf("d =%20.18f\n", d);
System.out.printf("d2=%20.18f\n", d2);
}
}
f =9.123456954956055000
d =9.123456700000000000
d2=9.123456954956055000
Process finished with exit code 0
정수형과 실수형 간에도 다음과 같이 형변환이 가능합니다.
- ● 예제 2-15
public class HelloWorldPrint {
public static void main(String[] args) {
int i = 91234567; // 8자리의 10진수
float f = (float)i; // int를 float으로 형변환
int i2 = (int)f; // float을 다시 int로 형변환
double d = (double)i; // int를 double로 형변환
int i3 = (int)d; // double을 다시 int로 형변환
float f2 = 1.666f;
int i4 = (int)f2;
System.out.printf("i=%d\n", i);
System.out.printf("f=%f i2=%d\n", f, i2);
System.out.printf("d=%f i3=%d\n", d, i3);
System.out.printf("(int)%f=%d\n", f2, i4);
}
}
i=91234567
f=91234568.000000 i2=91234568
d=91234567.000000 i3=91234567
(int)1.666000=1
Process finished with exit code 0
이상으로 자바의 변수에 대해 소스코드를 활용하여 모두 확인하였습니다. 다음 포스팅에서는 자바에서 연산자를 어떻게 활용하는지에 대해 알아보겠습니다. 오늘도 긴 글 읽어주시느라 고생하셨습니다.
감사합니다.
[레퍼런스]