[Java] 14. 조건문과 반복문 (1)

2023. 10. 9. 14:40Java언어 공부

자바의 if문

 

자바의 if 문은 C언어의 if문과 그 구조가 같다.

단, 조건문은 반드시 boolean으로 평가되는 표현식이어야 한다.

 

if(x % 2){

}

위와 같은 경우는 if 조건문 안의 식이 boolean이 아니기 떄문에 자바에서는 에러가 난다.

 

선택 연산자 (? :)를 사용하면 편하기도 하다.

선택 연산자는 if문에서 둘중 하나를 선택하는 경우에 대신 사용하기도 한다.

n > 0 "양수" : n < 0 ? "음수" : "0"

위와 같이 여러 번 사용도 가능하다.

 

객체 비교

 

참조 변수끼리 비교할 때는 객체의 내용이 아닌 주소를 가지고 비교함

Rectangle box1 = new Rectangle(10,10,100,100);
Rectangle r = box1;
Rectangle box2 = new Rectangle(10,10,100,100);

box1 == r				//true
box1 == box2			//false
box1.equals(box2)		//true

위와 같이 두 객체의 내용을 비교하려면 그 클래스의 메소드를 이용하여 비교해야 한다.

 

논리 연산자

 

논리곱 (&&), 논리합 (||), 논리부정(!)

 

논리곱과 논리합 연산자는 지연평가를 한다.

여기서 지연평가는 앞에 조건식이 안맞으면 뒤에 조건식을 안 보는 그런 것이다.

 

&, |, ^ 연산자 : &&, || 연산자와 동일하지만 지연 평가를 하지 않는다.

 

논리합, 논리곱은 결합법칙, 분배법칙, 드모르간의 법칙이 성립한다. 

이를 이용하면 조건식을 더 간결하고 가독성 있게 표현할 수 있다.

 

부동 소수의 비교

 

 반올림 오차 떄문에 비교하기가 힘들다 (비교하지 않는게 바람직함)

 

극복방법 :

매우 작은 수를 정의한 다음에 두 수의 차이가 작은 수보다 작은지를 비교한다.

 

혹은

 

Double.compare를 활용하는 경우도 있다.

 

자바의 switch문

C/C++에서는 switch문의 괄호 안에는 정수형이나 문자형만 올 수 있었다.

하지만, Java에서는 문자열, 열거형 등이 올 수 있다.

 

그 외에는, C와 C+와 유사하다.

 

더 추가된 내용으로는 아래와 같은 코드가 가능하다.

switch(month){
	case 4,6,9,11: return 30;
    case 2: return 28;
    default: return 31;
}

break를 적지 않으면 'fall through' 현상이 발생하는데 자바에서는 ,를 사용해 간단하게 나타낼 수 있다.

 

' : ' 대신에 ->를 사용할 수 있는데 이때 문자열을 나타내기 위해서는

{}와 yield 키워드를 사용해야 한다.

 

패턴 매칭 switch문

 

switch pet{ //Pet pet
case Cat c: c.meow(); break;
case Dog d: d.bark(); break;
case null: break;
default: pet.makeSound();
}

//case Cat c, Dog d처럼 패턴 매칭에서는 여러 개 매칭 불가
//null과 default는 결합 가능 (ex. case null, default)

 

when을 사용하면 추가적으로 검사가 가능하다.

(ex. case String s when s.length() > 0 -> .... )