코딩을 하는도중 조건부 로직을 설계하려고 할때 if문을 자주 사용하나 이것이 길어질경우 가독성이 떨어져 버그를 찾기위해 코드를 다시 열어보더라도 내가 한게 맞는지 싶을정도로 헷갈리는게 많습니다.

여기 페이지에선 이러한 문제를 줄이기 위하여 3항 연산자라는 개념에 대해 설명하려고 합니다.


3항연산자

2개 이상 변수를 비교할때 if-else의 대체로 쓸수 있는 연산자로

기본 형태는 : "(조건) ? true : false;" 이다.

//3항 연산자 기본형태

String cc = (5>4) ? "Answer" : "no";	// 5>4인경우? 맞으면 Answer, 틀리면no
int b = (5 > 4) ? 5 : 0;				// 5>4인경우? 맞으면 5, 틀리면0

System.out.println(b);
System.out.println(cc);

if(5>4){
	System.out.println("정답입니다");
}
else{
	System.out.println("틀렸습니다");
}

 

왜쓰는가?

3항연산자와 if-else의 가장큰 차이점은 표현식(3항 연산자)과 명령문(if-else)의 차이이다.

  • 표현식(expression)은 항상 어떠한 값을 계산하며 단일 값으로 평가되는 코드이다
  • 표현식이 모여서 명령문(statement)을 만드며 명령문은 하나의 실행 단위로 존재한다.

표현식은 값을 계산하지만, 명령문은 결과값을 어떤 변수에 할당 및 함수의 인수로 넘겨주는것은 할수없습니다.

그렇지만 대부분의 경우 if 문은 명령문 그 이상 동작을 수행합니다. 이들은 부수효과를 발생시키고 변수를 변경합니다. 부수효과의 영향과 가변적인 공유변수를 다루는 제어 흐름을 완전히 파악하지 못한다면 if 문이 작동하는 모든 그림을 볼 수 없습니다.

 

장점

  • 삼항 연산자는 임시 변수를 필요로하지 않으므로 단기기억력의 부하가 줄어 듭니다.
  • 삼항식은 신호 대 잡음비가 더 좋습니다. - 버그가 날시 원인을 찾기 쉽다
  • if문은 부수작용과 변이를 권장하지만, 삼항연산자는 순수한 코드를 권장합니다.
  • if보다 연산이 빠르다 - 과거보다 처리속도가 빨라져 if를 사용해도 되지만 프로그램 성능이 중요시 된다면 삼항 연산자를 쓸것

 

단점

  • 브레이크 포인트를 만들수 없다
  • 조건에 따른 결과를 쉽게 이해하기엔 어렵다 - IF는 문제발생시 시험용객체를넣어 어디가 문제인지 확인이 가능하지만 3항연산자는불가능하다 (0 또는 1만 나오기떄문)
// 함수적이지 않은함수 예시
// b가 0인경우 에러가 발생한다.
public static int div(int a, int b) {		
  return a / b;
}


// 변경한 함수
public static int div(int a, int b) {
  return (int) (a / (float) b);
}

 

부수효과

부수 효과는 함수 내의 실행으로 인해 함수 외부가 영향을 받는 것을 의미한다. 함수의 매개 변수의 값이 변경되어, 이로 인해 함수를 사용하는 코드에 영향을 주거나, 함수의 외부 세계인 데이터베이스, 파일 시스템, 네트워크로 데이터 이동이 함수 실행 중에는 발생하지 않아야 함수형 코드가 된다.

 

https://jinwooe.wordpress.com/2017/12/21/%EB%B6%80%EC%88%98-%ED%9A%A8%EA%B3%BC-side-effect-%EC%B0%B8%EC%A1%B0-%ED%88%AC%EB%AA%85%EC%84%B1-referential-transparency/

https://yceffort.kr/2022/02/think-about-ternary-operator

https://tpgns.github.io/2018/04/24/nested-ternaries-are-great/#fnref1

'JAVA' 카테고리의 다른 글

클래스 변수,인스턴스 변수  (0) 2023.01.30
인터페이스란?  (0) 2023.01.13
지수와 가수  (1) 2023.01.13
JPA란 무엇인가  (0) 2022.12.23
라이브러리와 프레임워크  (0) 2022.12.20

+ Recent posts