«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Code IT

if 와 switch의 관계? 본문

Spring

if 와 switch의 관계?

Codit 2019. 6. 20. 23:11

최근 어떤 분야에 흥미가 생겨 관련 강의 영상을 결제해 보는 중이다.

거의 10년간 Java만 사용해오다가 C#을 보는 중이다. 뭐 문법자체는 똑같고 사상도 똑같아서 안봐도 되지만, 그래도 결제를 했으니 보는 중이다.

수 차례의 강의 영상이 지나고 분기처리를 다루는 영상으로 왔는데 if 설명을 줄기차게 하고 switch를 다루는 내용이다.

 

서점에 판매하는 프로그래밍 책이나 인터넷 블로그등에 있는 글들을 보면, 이렇게 설명한다.

 

"if는 조건이 많아지면, 복잡해져요. 그것을 깔끔하게 만들어주는게 switch 에요."

 

혹자는 위 말이 "반은 맞고 반은 틀렸다" 라고 말할 수 있다. 다만, 생각을 한번 해보자.

 

Java나 C# 같은 상위레벨의 언어를 만든 사람들이 "if는 복잡하니까 switch 만 남겨두자" 라는 생각을 왜 안했을까?

까먹었을까? 설마, 그럴리가 없다.

 

if가 switch 보다 지저분하고 복잡하다는 말을 하는 사람들의 글을보면, 이유는 없다. 그냥 코드가 그렇게 보일 뿐이다. 그것이 자기만족으로만 끝난다면 문제는 없다. 하지만, 확인되지 않은 잘못된 정보를 마치 사실인양 말하는 것은 잘못되었다.

 

if 와 switch는 태생부터가 다르다.

if는 수, 수십, 수백, 수천개 그 이상의 경우의 수에서 "딱 하나!" 만을 골라 처리하고자 할 때 사용한다.

 

반대로 switch는 경우의 수를 다루는 것이 아니라 작업의 흐름을 다루는 것이다.

 

밥짓기를 해보자.

  • 1. 쌀을 밥통에 붓는다.

  • 2. 밥통에 물을 넣어 쌀을 씻는다. 이것을 3번 반복한다.

  • 3. 밥통을 밥솥에 넣는다.

  • 4. 취사를 누른다.

 

만약 2번 까지만 하고 다른 급한일이 생겨 밥짓기를 잠시 미루고 10분뒤에 다시 돌아왔다.

우리는 무엇부터 하면될까? 당연히 3번부터 시작한다.

 

switch는 이럴 경우에 사용한다. 그래서 문법은 이렇다.

 

int process = 1;

switch(process) {

case 1: 쌀 붓기

case 2: 쌀 3번 씻기

case 3: 밥솥에 밥통 넣기

case 4: 취사하기

default: 할게 없는데?

}

--> 결과

쌀 붓기

쌀 3번 씻기

밥솥에 밥통 넣기

취사하기

할게 없는데?

 

int process = 3;

switch(process) {

case 1: 쌀 붓기

case 2: 쌀 3번 씻기

case 3: 밥솥에 밥통 넣기

case 4: 취사하기

default: 할게 없는데?

}

--> 결과

밥솥에 밥통 넣기

취사하기

할게 없는데?

 

 

이 글을 본 사람들은 더 이상 if와 switch를 대체/호환 가능한 문법이라 생각하지 말자.

존재하는데는 다 이유가 있는 법이다.

 

 

Comments