출처 : https://www.webdevelopersnotes.com/javascript-if-else-statement

 

오늘 배울 내용은 제어문에서도 가장 핵심이 되는 조건문입니다.

boolean 데이터형을 배웠다면, 알차게 여기서 써먹어야겠죠!!

추가로 ==, equal, 논리 연산자에 대해서도 알아보도록 하겠습니다!

 

목차


    0. 조건문

    IfApp이라는 클래스를 하나 만듭니다.

     

    if 조건문을 실제로 보면서 어떻게 사용하는지, 어떤 기능을 가지고 있는지 확인해보도록 하겠습니다.

     

    if 조건문의 소괄호 안에는 true/false값이 들어가야 합니다.

    조건이 맞냐 틀렸냐에 따라 true/false가 달라지겠죠?

    만약 조건이 true라면 중괄호 안의 코드가 실행되고, false면 실행이 되지 않습니다.

    이것이 if 조건문의 가장 기본입니다.

     

     

    그렇다면 조건이 true이면 어떤 코드를 실행하고, false면 다른 코드를 실행하고 싶다면 어떻게 할까요?

    else를 사용합니다.

    조건이 true가 아닌 경우를 else라고 부르고, else는 새로운 중괄호를 동반합니다.

    이 때 true가 아니면 중괄호 안의 코드가 실행되는 것이죠.

     

     

    if문 안에 또 다시 if문이 들어갈 수도 있습니다.

    이런 경우를 중첩된 if문이라고 부릅니다.

     

     

    하지만 중첩된 if문을 사용하면 코드가 한눈에 들어오지 않는 단점이 있습니다.

    이럴 때는 else if를 사용하면 보다 깔끔하게 조건을 설정할 수 있습니다.

    먼저 if 조건을 살피고, 아니라면 그 다음 else if의 조건을 살피고, 그것도 아니라면 else로 넘어가서 코드를 실행하게 됩니다.

    public class IfApp {
    
    	public static void main(String[] args) {
    		
    		System.out.println("a");
    		
    //		if(true) { // 괄호 안의 값이 true면 중괄호 안의 코드가 실행된다! false면 실행이 되지 않겠죠!
    //			System.out.println(1);
    //		} else {
    //			if(true) {
    //				System.out.println(2);
    //			} else {
    //				System.out.println(3);
    //			}
    //		}
    		
    		if(false) {
    			System.out.println(1);
    		} else if(true) {
    			System.out.println(2);
    		} else {
    			System.out.println(3);
    		}
    		
    		System.out.println("b");
    		
    	}
    
    }
    

     


    1. 조건문 응용 1

    그런데 지금까지 우리가 작성한 저 코드는 크게 의미가 없습니다.

    저렇게 노랗게 밑줄이 쳐져있는 것은, 지워도 문제가 없는 코드이기 때문에 그렇습니다.

    조건이 false이기 때문에 { } 안의 코드가 실행될 리가 없는거죠.

    만약 저 자리에 의미있는 조건이 온다면 밑줄이 사라지겠죠?

     

    AuthApp이라는 클래스를 하나 만들어줍니다.

    여기다가 ssoco가 오면 "어서오세요"를 출력하고, 다른 사람의 이름이 오면 "누구세요"를 출력하는 프로그램을 만들어보겠습니다.

     

    먼저 AuthApp의 기본 입력값에 ssoco를 작성했습니다.

    이 값은 args[0]으로 불러와서 사용할 수 있겠죠?

    (TMI : Run Configuration창은 재생버튼 옆의 작은 화살표를 누르면 켜실 수 있습니다!)

     

     

    이제 main함수 안에 코드를 작성해줍니다.

    id는 "ssoco"이고, inputId는 아까 입력한 값이 됩니다.

    "Hi!"를 출력하고, inputId와 id가 같으면 "Master!", 다르면 "Who are you?"를 출력하도록 작성했습니다.

     

     

    어..? 예상과는 다르게 Who are you?가 뜹니다.

    분명 id랑 inputId랑 같은데.. 왜...?

     

     

    이 문제는 아래와 같이 equals 메소드를 사용하면 해결할 수 있습니다.

    왜 이런 문제가 발생하는 지는 조금 있다 알려드리도록 하겠습니다!

    이제 "Master!"가 잘 출력되죠!!

     

     

    그렇다면 다른 값을 넣으면 어떻게 될까요?

    당연히 "Who are you?"가 출력됩니다.

     

     


    2. 조건문 응용 2

    이번에는 비밀번호를 추가해보겠습니다.

     

    아래와 같이 pass와 inputPass 변수를 만들어서 할당하고, Run Configuration에서 1111을 추가해줍시다.

    디버거로 확인하면 값이 잘 들어갔죠?!

     

     

    이제 중첩된 if문을 사용해서 아이디와 비밀번호를 모두 확인합니다.

    둘 다 같으면 "Master!", 아이디는 같은데 비밀번호가 다르면 "Wrong password!", 아이디가 다르면 "Who are you?"가 출력됩니다.

     

     

    이번에는 논리연산자 &&를 이용해 위 조건문을 좀 더 간단하게 표현해보도록 하겠습니다.

    조건 두개를 &&로 엮어서 두 조건이 모두 만족해야만 "Master!"를 출력되고, 아니라면 "Who are you?"가 출력됩니다.

     

    이렇게 만들어도 정상적으로 작동!!

    public class AuthApp {
    
    	public static void main(String[] args) {
    		
    		String id = "ssoco";
    		String inputId = args[0];
    		
    		String pass = "1111";
    		String inputPass = args[1];
    		
    		System.out.println("Hi!");
    		
    //		//if(inputId == id) {
    //		if(inputId.equals(id)) {
    //			if(inputPass.equals(pass)) {
    //				System.out.println("Master!");
    //			} else {
    //				System.out.println("Wrong password!");
    //			}
    //		} else {
    //			System.out.println("Who are you?");
    //		}
    		
    		if(inputId.equals(id) && inputPass.equals(pass)) {
    			System.out.println("Master!");
    		} else {
    			System.out.println("Who are you?");
    		}
    		
    
    	}
    
    }
    

     

    이렇게 Input값에 따라 프로그램이 다르게 작동하여 Output값을 그때그때 다르게 만들어줄 수 있습니다.

    프로그램에게 생명을 불어넣은 느낌이죠?!!

     


    3. == vs Equals

    위에서 ==를 썼다가 .equals()로 바꿨죠?

    이번에는 == 연산자와 equals 메소드의 차이에 대해서 알아보겠습니다.

     

    바로 차이를 알려드리면, ==는 주소값을 비교하고, equals 메소드는 값 자체를 비교합니다.

    boolean, int, double, short, long, float, char 등의 원시적인 데이터형은 ==를 사용해도 무방합니다.

    같은 데이터가 다른 주소값을 가지지 않기 때문입니다.

     

    하지만 String, Array, Date, File 등의 비원시형태의 데이터형은 ==를 사용하면 올바르게 비교가 되지 않을 수 있습니다.

     

    실제로 이렇게 사용할 일은 거의 없겠지만, new String("java")를 두 번 반복해서 o1과 o2에 값을 넣어주게 되면, 각 인스턴스는 다른 주소값에 데이터를 가지게 됩니다.

    이 때 두 문자열을 비교하면 주소값이 다르기 때문에 ==로 비교하게 되면 false가 나오는 것이죠! 

     

    자바에서는 문자열에 한해서 편의를 위해서 일반적인 경우에 같은 메모리를 가리키게 합니다.

    하지만 어디까지나 예외사항이기 때문에, 혹시 모를 상황에 대비해서 equals를 사용하는 것이 조금 더 적합한 방법입니다.

    만약 편하게 ==를 사용하고 싶다고 한다면, 디버거를 돌려가면서 내가 원하는 값이 도출되는지 항상 확인해야겠죠?!! 

     

     


    4. 논리 연산자

    이번에는 LogicalOperatorApp 클래스를 만듭니다.

     

    각 논리 연산자의 결과값에 대해서 살펴보겠습니다.

    &&AND(그리고) 입니다. 앞과 뒤가 모두 true이어야 true를 반환합니다.

    ||OR(혹은) 입니다. 앞과 뒤 둘중 하나만 true여도 true를 반환합니다.

    !NOT 입니다. 단항 연산자로, 뒤에 오는 데이터의 반대값을 반환합니다.

     

     

    전에 만든 AuthApp에서 id값과 pass값이 모두 맞아야만 { } 안의 코드가 작동한다고 했었죠?

    심심하니 AuthApp을 복사한 AuthApp2를 만들어서 장난을 쳐보도록 하겠습니다!

     

    만약 비밀번호 2개 중에 1개만 맞아도 로그인이 되게 하고 싶다면 어떻게 만들면 될까요?

     

    아래와 같이 || (OR)을 사용해서 두 비밀번호중 하나만 inputPass와 일치해도 "Master!"를 출력하도록 만들 수 있습니다!

     

     

    그런데 이렇게 만들면 if 안의 조건이 너무 길어지죠?

    아래 코드처럼 boolean데이터형 변수인 isRightPass를 만들어서 따로 빼줄 수도 있습니다!

     

    public class AuthApp2 {
    
    	public static void main(String[] args) {
    		
    		String id = "ssoco";
    		String inputId = args[0];
    		
    		String pass1 = "1111";
    		String pass2 = "2222";
    		String inputPass = args[1];
    		
    		System.out.println("Hi!");
    		
    //		//if(inputId == id) {
    //		if(inputId.equals(id)) {
    //			if(inputPass.equals(pass)) {
    //				System.out.println("Master!");
    //			} else {
    //				System.out.println("Wrong password!");
    //			}
    //		} else {
    //			System.out.println("Who are you?");
    //		}
    		
    		boolean isRightPass = (inputPass.equals(pass1) || (inputPass.equals(pass2)));
    		if(inputId.equals(id) && isRightPass) {
    			System.out.println("Master!");
    		} else {
    			System.out.println("Who are you?");
    		}
    		
    
    	}
    
    }
    

     


    생각보다 길어졌지만, 조건문은 굉장히 굉장히 굉장히 중요한 부분이기 때문에 빼 놓고 갈 수 있는 부분이 없었다는 점 이해 부탁드립니다 ㅠㅠ

     

    다음 포스팅에서는 제어문의 또 다른 핵심 요소인 반복문과 이전에 살짝 배운 배열에 대해서 알아보도록 하겠습니다!

     

    오늘도 읽어주셔서 감사합니다 :)

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기