002. Java의 정석 기초편 ch2 변수

코딩벌레·2023년 5월 23일
0

Java의 정석

목록 보기
2/4

01. 출력


Java에서 화면에 글자(를 포함한 뭐든..)를 출력하는 명령어는
System.out.print()와 System.out.println()의 두 가지다.
둘의 차이는 줄바꿈 여부인데 전자는 줄바꿈을 하지 않아 여러번 출력할 때 이전에 출력된 내용 뒤에 이어서 출력된다.

참고로 Java는 대소문자를 구분한다. system으로 입력하면 오류가 난다.

❗Cannot resolve symbol 'system'

class Ex2_1 {
	public static void main(String args[]) {
    	System.out.println("Hello, World!");
        System.out.print("Hello");
        System.out.println("World");
    }
}

02. 덧셈 뺄셈 계산하기

계산한 결과 값을 출력하는 것은 어렵지 않다.

print 명령어의 값에 연산 부호가 포함된 식을 적어버리면 그만이다.

class Ex2_3 {
	public static void main(String args[]) {
		System.out.println(5+3);
    	System.out.println(5-3);
    	System.out.println(5*3);
    	System.out.println(5/3);	// 나눗셈(/)연산의 경우 몫만 출력한다.
    }
}


03. 변수의 선언과 저장


변수란, 하나의 값을 저장할 수 있는 저장공간이다.
변수가 필요하다면 변수를 선언한 후 변수에 값을 저장해 사용한다.

여기서 변수를 선언하는 방법은 아래와 같다.
int x;		// 변수타입(int) 변수이름(x)

int 타입의 x라는 변수를 사용하겠다고 선언한 것이다.
변수의 타입은 저장할 값의 종류에 따라 선택해야 하는데 그 중 자주 쓰이는 것은 4가지 정도로 꼽을 수 있다.

04. 변수의 타입

분류변수의 타입설명
숫자int정수(integer)를 저장하기 위한 타입
double실수를 저장하기 위한 타입
문자char문자(character)를 저장하기 위한 타입
String여러 문자(문자열, string)를 저장하기 위한 타입

int x = 100;
double pi = 3.14;
char ch = 'a';
String str = "abc";

05. 상수와 리터럴

'상수(constant)'도 변수와 마찬가지로 '값을 저장할 수 있는 공간'이지만 변수와의 차이점은 한 번 값을 저장하면 다른 값으로 바꿀 수 없다는 점이다.

상수를 선언하는 방법은 변수와 동일하나 변수타입 앞에 키워드 'final'을 붙여 선언한다.

final int MAX_SPEED = 10;

MAX_SPEED = 50;		// int타입 상수 MAX_SPEED에 10을 저장하고 다른 값으로 변경하려 하면 오류.

상수의 이름은 모두 대문자로 하는 것이 관례라고 한다.



위에서 '상수'가 기존에 알고 있던 '상수'의 의미와 다르게 쓰였음을 알 수 있다.
그래서 프로그래밍에서의 '상수'와 구분하기 위해 '리터럴(literal)'이라는 용어를 사용한다.
int year = 2023;				// year -> 변수		2023, 100 -> 리터럴
final int MAX_VALUE = 100;		// MAX_VALUE -> 상수

06. 리터럴의 타입과 접미사

리터럴에도 변수와 같이 타입이 있다. 그 중 정수형과 실수형 리터럴은 구분을 위해 접미사를 붙여 사용한다.

long타입 리터럴에는 접미사 'l' 또는 'L'을 붙이고 접미사가 없다면 int타입의 리터럴이다.
또한 float타입 리터럴에는 'f' 또는 'F'를 붙인다. 접미사가 없다면 double타입의 리터럴이다.

07. 문자 리터럴과 문자열 리터럴

'문자 리터럴'은 작은 따옴표(')로 감싸진 문자 하나로, 문자 두개 이상의 경우 큰 따옴표(")로 감싸야 하며 '문자열 리터럴'이라고 한다.

문자열 리터럴의 경우 따옴표 안에 아무 문자도 넣지 않는 '빈 문자열(Empty string)을 허용한다. 그러나 문자 리터럴의 경우에는 반드시 하나의 문자가 있어야 한다.

char ch = 'J';				// char ch = 'Java'; 와 같이는 사용할 수 없다.
String name = "Java";

String str = "";			// 빈 문자열 str
char ch = '';				// 오류
char ch = ' ';				// ch에 공백 문자(blank)를 저장


08. 문자열 결합


둘 이상의 문자열을 합칠 때엔 덧셈(+)기호를 이용한다. 만약 더하는 대상 중 일부만 String이면 나머지를 String으로 변환한 후 두 문자열을 더한다.
String name = "ja"+"va";
System.out.println(name);			// 출력 : java

String str = name + 8.0;
System.out.print(str);				// 출력 : java8.0

System.out.println(7);				// 출력 : 7
System.out.println("7");			// 출력 : 7
System.out.println(7+7);			// 출력 : 14
System.out.println("7"+7);			// 출력 : 77

09. 두 변수의 값 바꾸기

int x = 10;
int y = 20;

두 변수 x와 y에 저장된 값을 서로 바꾸려면 어떻게 해야 할까?

우선 한 값을 일시적으로 저장해 둘 변수가 하나 더 필요하다.

int x = 10;
int y = 20;
int tmp;			//임시로 값을 저장하기 위한 변수선언

tmp = x;			//x값(10)을 tmp에 저장
x = y;				//y값(20)을 x에 저장
y = tmp;			//y에 tmp값(10)을 저장

System.out.println("x = "+x);		// 출력 : x = 20
System.out.println("y = "+y);		//		 y = 10


10. 기본형과 참조형


프로그래밍에서 우리가 주로 사용하는 값(data)의 종류(type)는 '문자와 숫자', 그 중 숫자는 '정수와 실수'로 나눌 수 있다.

이러한 값의 종류에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것을 자료형(data type)이라고 한다.


자료형은 크게 '기본형'과 '참조형'으로 나눌 수 있다.
기본형 변수는 실제 값을 저장하는 반면, 참조형 변수는 값이 저장되어 있는 주소(memory address)를 값으로 갖는다.
자바는 참조형 변수 간의 연산을 할 수 없으므로 연산에 사용되는 것은 모두 기본형 변수이다.


11. 기본형의 종류와 범위

기본형에는 모두 8개의 타입(자료형)이 있다.

종류1 byte2 byte4 byte8 byte
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble

위에서 강조 표시한 int와 double은 각각 정수형과 실수형의 기본 형식이다.

기본 자료형의 종류와 크기는 외워둬야 한다.



12. printf()를 이용한 출력


앞에서 사용한 print(), println()은 변수의 값을 그대로 출력하는 함수이므로 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.

printf()는 '지시자(specifier)'를 통해 변수의 값을 여러 형식으로 변환해 출력한다.

int age = 24;
System.out.printf("age:%d%n", age);					// 출력 -> age:24
													// %n은 줄바꿈
int year = 2023;
System.out.printf("age:%d year:%d", age, year);		// 출력 -> age:14 year:2023

printf()의 지시자 중 자주 사용되는 것은 아래와 같다.

지시자설명
%d10진(decimal) 정수의 형식으로 출력
%x16진(hexa-decimal) 정수의 형식으로 출력
%f부동 소수점(floating-point)의 형식으로 출력
%c문자(character)로 출력
%s문자열(string)로 출력


13. printf()를 이용한 출력 예제


class Ex2_9 {
    public static void main(String[] args) {
        String url = "www.codechobo.com" ;
        float f1 = .10f;
        float f2 = 1e1f;
        float f3 = 3.12e3f;
        double d = 1.23456789;

        System.out.printf("f1=%f, %e, %g%n", f1, f1, f1);	// %f는 소수점 6자리까지 출력
        System.out.printf("f2=%f, %e, %g%n", f2, f2, f2);	// %e는 지수형태로,
        System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);	// %g는 값을 간략하게 표현
        System.out.printf("d=%f%n", d);
        System.out.printf("d=%14.10f%n", d);			// %전체자리.소수점 아래 자리f
        System.out.printf("[12345678901234567890]%n");	// 정수부분의 빈 자리는 공백으로,
        System.out.printf("[%s]%n", url);				//소수점 아래 빈 자리는 0으로 채운다.
        System.out.printf("[%20s]%n", url);			// 20글자 공간에 출력(우측정렬)
        System.out.printf("[%-20s]%n", url);		// 20글자 공간에 출력(우측정렬)
        System.out.printf("[%.8s]%n", url);			// 왼쪽에서 8글자만 출력
    }
}

실행 결과

f1=0.100000, 1.000000e-01, 0.100000
f2=10.000000, 1.000000e+01, 10.0000
f3=3120.000000, 3.120000e+03, 3120.00
d=1.234568
d=  1.2345678900
[12345678901234567890]
[www.codechobo.com]
[   www.codechobo.com]
[www.codechobo.com   ]
[www.code]

0개의 댓글