[JAVA 기초부터 훑어보기]05. 변수, 연산자, 수식

2023. 1. 12. 16:24JAVA(자바)

1. 변수와 자료형

(1) 변수

- 변수는 데이터를 담아두는 상자와 같다고 생각할 수 있다 

 

(2) 자료형

- 변수에 저장되는 자료의 타입을 의미

- 자료형은 변수에 저장되는 값들의 형태와 허용 연산 등을 결정한다. 

- 자바는 타입을 강력하게 규제하는 언어 -> 자바에서는 타입을 반드시 지정해야하고 타입이 다른 데이터는 변수에 저장 X

- 자바에는 크게 나누어서 기초형, 참조형의 두 가지 타입의 변수가 존재한다

(3) 변수의 선언과 초기화

- 변수 선언이란 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것이다 

- 변수 선언은 세미콜론으로 문장을 마무리 지어야 한다

변수 선언 방법

// 변수 선언 예
char c = 'a'
int i = 7;
double interestRate = 0.05;

 

(4) 변수의 이름

- 변수의 이름은 식별자의 일종으로 규칙을 가진다

식별자는 유니코드 문자와 숫자의 조합으로 만들어진다. 한글도 가능하다
식별자의 첫 문자는 일반적으로 유니코드 문자여야 한다. 첫 문자가 _,$로 시작될 수도 있으나 이는 특별한 경우로 제한하는 것이 좋다
두 번째 문자부터는 문자, 숫자, _, $ 등이 가능하다
대문자와 소문자는 구별된다
식별자의 이름으로 키워드를 사용해서는 안된다. 자바에서의 키워드는 다음과 같다.

※ 키워드란?

- 키워드는 특별한 의미를 갖고 있는 명령어

- 미리 예약해놓은 단어이므로 변수로 사용해서는 안된다

기본자료형 : void, boolean, byte, char, float, double, int, short
변수 유형지정 : transient, volatile
제어문 : if, else, switch, case, for, while, do, break, continue, return
클래스 : class, interface, abstract, final, extends, implements, this, super, new, instanceof, static,
접근지정자 : public, protected, private
예외처리 : try, catch, finally, throw, throws
패키지 : import, package
상수 : null, true, false
메소드 유형 : native, synchronized
사용되지 않은 키워드 : const, goto

(5) 식별자 이름 작성 관례

- 변수의 이름이나 메소드의 이름을 식별자라고 하는데 일반적으로 다음과 같은 관례를 따라 식별자를 짓는다

종류 사용 방법
클래스명 각 단어의 첫 글자는 대문자로 한다 StaffMember, ItemProducer
변수명, 메소드명 소문자로 시작되어 2번쨰 단어의 첫 글자는 대문자로 한다 width, payRate, acctNumber, getMonthDays(), fillRect()
상수 상수는 모든 글자를 대문자로 한다 MAX_NUMBER

 

2. 기초형

(1) 정의

- 기초형은 바이트, 정수, 실수, 문자, 논리값 등의 일반적인 데이터를 나타내는 형으로 모두 8개가 있다

- 자바의 세상은 모두 객체로 되어있으나 기초형은 자주 사용되므로 성능 저하를 막기 위해 객체로 되어 있지 않다

- 만약 정수를 나타내는 기초형인 int를 객체로 포장해야하는 경우 int 대신 Integer 클래스를 사용하면 된다

데이터형 설명 크기(비트) 기본값 최소값 최대값
byte 부호 있는 정수 8비트 0 -128 127
short 부호 있는 정수 16비트 0 -32,768 32,767
int 부호 있는 정수 32비트 0 -2,147,483,648(-21억) 2,147,483,647(21억)
long 부호 있는 정수 64비트 0L - 9,223,372,036,854,775,808 9,223,372,036,854,775,807
float 실수 32 0.01 약 ± 3.4 x 10^(-38)(유효숫자 7개) 약 ± 3.4 x 10^38(유효숫자 7개)
double 실수 64 0.0d 약 ± 1.7 x 10^(-308)(유효숫자 15개) 약 ± 1.7 x 10^(308)(유효숫자 15개)
char 문자(유니코드) 16 null '\u0000'(0) '\uFFFF'(65535)
boolean true 또는 false 8 false 해당 없음 해당 없음

- byte, short은 거의 사용 x

 

(2) 정수형 상수

- 상수 또는 리터럴이란 x=100;에서 100과 같이 소스 코드에 쓰여있는 값을 의미한다

- 정수형 상수는 여러 진법으로 표시가 가능

- 보통 부호 있는 int 형으로 저장되는 것이 기본이다. -> if, 아주 큰 수를 다루고 있다면, 76L처럼 숫자의 끝에 l이나 L을 붙여서 long형으로 저장되도록 할 수 있다(long 변수에 값을 대입할 때는 L과 같은 접미사를 꼭 붙여야 파일 에러가 발생하지 않는다)

- JDK 7부터는 정수 상수 안에 밑줄 기호가 포함될 수 있다

int x = 123_456

변수 x에는 123456이 대입됨, 밑줄 기호는 무시된다!

 

(3) 기호 상수

- 자바에서는 리터럴을 기호 상수를 이용하여 번수처럼 표현할 수 있다.

- 리터럴을 숫자로 표현하는 것보다 변수처럼 이름을 주어서 사용하게 되면 프로그램이 읽기 쉬워진다

- 기호 상수는 변수 선언 앞에 키워드 final을 붙여서 만든다

final double PI = 3.141592; //final은 변경되지 않는다는 의미이다

 

(4) 논리형 

- 논리형은 true 아니면 false만을 가질 수 있다 

- 논리 연산을 수행하는 데 사용됨

class BooleanTest{
public static void main(String args[]){
	boolean b;
    
    b= ture;
    System.out.println("b : " + b);
    b = (1 > 2);
    System.out.println("b : " + b);
	}
}

 

//실행결과
b : true
b : false;

※ C나 C++에서는 정수값이 논리형으로 사용된다. 0이 false에 해당하고 나머지값이 true이다. 그러나 자바에서는 정수값을 논리형으로 형변환할 수 없다.

 

(5) 실수형

- 부동소수점형은 실수를 나타내는 데 사용된다

- 자바는 두 가지의 부동소수점형을 가지고 있는데 float과 double은 각각 32비트와 64비트를 이용하여 실수를 표현한다

package floating_point;

//원의 면적 구하기 
//double은 실수형을 나타내므로 3.141592는 부동소수점형 자료형인 실수형을 사용하여야 한다
public class AreaTest {
	public static void main(String[] args) {
		double radius, area;
		final double PI = 3.141592;
		
		radius = 5;
		area = PI * radius * radius;
		System.out.println("원의 면적은 " + area);

	}
}

 

(6) 실수형 상수

- 실수형 상수는 double형이 기본이다 따라서 실수형 상수를 float 변수에 저장하면 오류가 난다!

- 지고 있는데 float과 double은 각각 32비트와 64비트를 이용하여 실수를 표현한다

 

float temperature = 25.6 //25.6은 double형이므로 오류!

- 만약 64비트 값이 필요하지 않다면 더 작은 32비트 float형을 사용할 수 있다 5.63e2f와 같이 숫자의 끝에 f나 F를 붙이면 float형 상수가 된다.

float temperature = 25.6F //오류가 나지 않는다!

- JDK 7부터 실수형 상수에도 밑줄 기호를 사용할 수 있다.

 

(7) 문자형

- 문자형인 char는 하나의 문자를 저장할 수 있다. 

- 자바에서는 유니코드(unicode)를 지원하기 위해 문자 하나가 16비트로 표현된다.

char ch1 = '가';
char ch2 = '\uac00'; //'가'를 나타낸다

 

※ 자바에서의 "와 '의 차이

- 파이썬, 자바스크립트와는 달리 C++나 자바는 ''와 ""로 char와 String을 구분한다

 

- 자바는 문자(Character)와 문자열(String)을 구분한다.

- 문자는 한 글자(char)를 의미하고, 문자열(string)은 여러 개의 문자가 결합한 것을 의미한다. 자바에서 문자는 '(작은 따옴표)로 감싸야 한다.

System.out.println('코');
문자열은 "(큰따옴표)로 감싸야 한다!
System.out.println("코드브레이커");

만약 문자열을 작은 따옴표로 감싸면 에러가 발생한다.

하나의 문자를 큰따옴표로 감싼다고 에러가 발생하지는 않는다. 한 글자도 문자열이 될 수 있기 때문!


※ 만약 문자열 안에 큰 따옴표를 넣고 싶다면 어떻게 해야 할까? 

▣ 이스케이프

- \(역슬래쉬)를 " 앞에 위치시키면 " 를 문자열의 시작과 끝을 구분하는 구분자가 아니라 단순히 문자로 해석하도록 강제할 수 있다. 이러한 기법을 escape(이스케이프)라고 한다.

즉 큰따옴표가 가진 문법적인 역할에서 도망(escape)쳐서 문자로 인식하도록 한다는 의미다.
System.out.println("egoing said \"Welcome programming world\"");

-> 아래와 같이 쓰면 오류남!

System.out.println("egoing said "Welcome programming world"");

※ 여러 줄을 표시하고 싶은데 어떻게 해야할까?

▣ 개행문자

- 여러 줄을 표시하고 싶을 때는 아래와 같이 개행 문자(\n)를 쓰면 된다. 

System.out.println("egoing said. \n Welcome programming world. \n");

 

(8) 문자형 상수

- 문자형 상수는 하나의 유니코드 문자를 표현하며, 단일 따옴표를 사용하여 표시한다

특수문자 표기 의미
\\ 역슬래시
\ 연결자
\b 백스페이스
\r 캐리지 리턴
\f 폼피드
\t 수평 탭
\n 새 라인
\' 단일 따옴표
\" 이중 따옴표
\udddd 16진수 dddd에 해당하는 유니코드 ㅁ누자
\ddd 8진수 ddd에 해당되는 문자

 

(9) 문자열

- 자바에서 문자열은 String 클래스로 제공된다 

String s = "Hello World!";
System.out.println(s);

 

3. 연산자

(1) 연산자와 피연산자

- 연산자는 특정한 연산을 나타내는 기호를 의미

- 피연산자는 연산의 대상이다. 

 

(2) 연산자(operator)

- 피연산자들에 대하여 지정된 연산을 수행하고 결과를 반환한다. 

- 사칙 연산자들 사이에는 우선 순위(precedence)가 존재

- 우선 순위가 같은 연산자는 대입 연산자를 제외하고는 왼쪽에서 오른쪽으로 계산된다

- 대입 연산자는 오른쪽에서 왼쪽으로 계산된다

- 연산자는 산출 방법에 따라 산술, 부호, 문자열, 대입, 증감, 비교 연산자로 구분하고, 피연산자 수에 따라 단항, 이항, 삼항 연산자로 구분


단항 연산자🍖

- 단항 연산자는 피연산자가 단 하나뿐인 연산자를 말하며, 부호 연산자(+, -), 증감 연산자(++, –), 논리 부정 연산자(!)가 존재

부호 연산자(+, -)
- 부호 연산자는 양수 및 음수를 표시하는 +, -를 말한다. boolean 타입과 char 타입을 제외한 나머지 기본 타입에 이용할 수 있다
연산식 설명
+ 피연산자 피연산자의 부호 유지
- 피연산자 피연산자의 부호 변경

증감 연산자(++, --)
- 증감 연산자는 변수의 값을 1 증가(++)시키거나 1 감소(- -)시키는 연산자를 말합니다. boolean 타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있다.
연산식 설명
++ 피연산자 다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킴
-- 피연산자 다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴
피연산자 ++ 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴
피연산자 -- 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴

논리 부정 연산자(!)
- 논리 부정 연산자는 true를 false로, false를 true로 변경하기 때문에 boolean 타입에만 사용할 수 있다.
연산식 설명
! 피연산자 피연산자가 true이면 false 값을 산출
피연산자가 false이면 true 값을 산출

 

이항 연산자🍖🍖

- 이항 연산자는 피연산자가 2개인 연산자를 말하며, 여기에는 산술 연산자(+, -, *, /, %), 문자열 결합 연산자(+), 비교 연산자(<, <=, >, >=, ==, !=), 논리 연산자(&&, ||, &, |, ^, !), 대입 연산자(=, +=, -=, *=, /=, %=) 등이 있습니다.

산술 연산자(+, -, *, /, %)
- 산술 연산자는 사칙연산자인 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)과 나머지를 구하는 %까지 총 5개입니다. 산술 연산자는 boolean 타입을 제외한 모든 기본 타입에 사용할 수 있다.
연산식 설명
피연산자 + 피연산자 덧셈 연산
피연산자 - 피연산자 뺄셈 연산
피연산자 * 피연산자 곱셈 연산
피연산자 / 피연산자 왼쪽 피연산자를 오른쪽 피연산자로 나눗셈 연산
피연산자 % 피연산자 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 구하는 연산

비교 연산자(<, <=, >=, ==, !=)
- 비교 연산자는 피연산자의 대소(<, <=, >, >=) 또는 동등(==, !=)을 비교해서 true/false를 산출합니다. 대소 연산자는 boolean을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용할 수 있습니다. 비교 연산자는 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용되어 실행 흐름을 제어할 때 사용
구분 연산식 설명
동등 비교 피연산자 A == 피연산자 B 두 피연산자의 값이
같은지 검사
피연산자 A != 피연산자 B 두 피연산자의 값이
다른지 검사
크기 비교 피연산자 A > 피연산자 B 피연산자A가
큰지 검사
피연산자 A >= 피연산자 B 피연산자A가
크거나 같은지 검사
피연산자 A < 피연산자 B 피연산자A가
작은지 검사
피연산자 A <= 피연산자 B 피연산자A가
작거나 같은지 검사

논리 연산자(&&, ||, &, |, ^, !)
- 논리 연산자는 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행합니다. 논리 연산자의 피연산자는 boolean 타입만 사용할 수 있다.
구분 연산식 결과 설명
AND(논리곱) true && 또는 & true true 피연산자 모두가 true일 경우에만 연산 결과가 true
true false false
false true false
false false false
OR(논리합) true || 또는 | true true 피연산자 중 하나만 true 이면 연산 결과는 true
true false true
false true true
false false false

구분 연산식 결과 설명
XOR(배타적 논리합) true ^ true true 피연산자가 하나는 true이고
다른 하나가 false일 경우에만 연산 결과가 true
true false false
false true false
false false false
NOT(논리 부정)   ! true false 피연산자의 논리값을 바꿈
false true

 

삼항 연산자🍖🍖🍖

- 삼항 연산자(?:)는 3개의 피연산자를 필요로 하는 연산자를 말합니다. 삼항 연산자는 ? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식이라고 부르기도 한다.

 

4. 연산자의 우선 순위와 결합 규칙

 

 

5. 비트 연산자

연산자 의미 기능
~ 비트별 NOT 단항 연산자, 피연산자의 모든 비트를 반전시킴
& 비트별 AND 두 피연산자의 값이 둘 다 1인 경우만 1
^ 비트별 XOR 두 피연산자의 값이 다른 경우 1
| 비트별 OR 두 피연산자 중 하나라도 1인 경우 1
<< 비트 왼쪽 이동 a를 b만큼 왼쪽으로 이동, 빈 공간은 0으로 채움
>> 비트 오른쪽 이동 a를 b만큼 오른쪽으로 이동, 빈 공간은 음수는 1, 양수는 0으로 채움
>>> 비트 오른쪽 이동(unsigned) a를 b만큼 오른쪽으로 이동, 빈 공간은 무조건 0으로 채움

 

6. 형변환

(1) 정의

- 어떤 자료형의 값을 다른 자료형의 값으로 바꾸어주는 연산

(새로운 자료형) 수식;

- 예를 들어서 int 형 변수 x가 가지고 있는 값을 double로 형변환하여서 y에 대입하려면 다음과 같다

y = (double) x;

 

(2) 자동적인 형변환

- 자바는 필요할 때마다 자동적으로 형변환을 한다. 수식에서 서로 다른 자료형이 등장하면 자바 컴파일러는 그 중에서 가장 큰 타입으로 자동적으로 변환한다

double d = 2 + 3.5;        //정수 2가 2.0으로 변환된 후에 3.5와 더해져서 5.5로 계산된다

 

(3) 축소 변환

- 더 작은 크기의 자료형에 값을 저장하는 형변환

- 실수형 변수를 정수형 변수에 저장하는 것이 그 예이다

- 이 변환은 정밀한 숫자나 큰 숫자를 나타내는 정보를 잃을 가능성이 있다

int i = (int) 12.5;          //i에는 12만 저장

 

(4) 확대 변환

- 축소 변환의 반대

- 더 큰 크기의 변수로 값을 이동하는 변환

- 일반적으로 확대 변환은 안전한 변환

double d = (double) 100;