SturdyCobble's Study Note

[프로그래밍] 3.1 제어문(1) - if문 본문

휴지통/['19.06-'20.07]프로그래밍101

[프로그래밍] 3.1 제어문(1) - if문

StudyingCobble 2019. 8. 3. 22:52

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


※이 글은 프로그래밍 언어에 대한 기초적인 이해를 가정하고 있습니다. 최소 프로그래밍 언어 하나 정도를 약간이라도 접해보시는 것을 추천합니다. 또한, 이 글은 심화 내용은 되도록 피하여 서술했습니다.

 

이번 글에서는 제어문 중 하나인 if문을 소개합니다. 각 언어에서는 다음과 같이 if문을 사용합니다.

if( 조건문 ){
	실행할 내용;
}

 

if( 조건문 ):
    실행할 내용

프로그램은 if문 안의 조건문을 평가하여 중괄호 안의 블럭을 실행할지 안 할지를 결정합니다. 참이면 실행하고, 거짓이면 실행하지 않고 if문을 넘어갑니다. 여기서 Python만 독특하게 괄호를 쓰지 않고, 들여쓰기(공백 4칸)로 블럭을 구분하는 모습을 보입니다.

 

 

숫자 1(또는 Boolean 자료형이 있는 언어의 경우 True도 가능)가 참을 나타내기에 다음과 같이 아무 의미는 없고, if문을 쓰나마나 하게 만드는 코드를 작성하는 것도 가능합니다. (아래 코드의 '실행할 내용'은 무조건 실행됩니다.)

 

if(1){
	실행할 내용;
}

 

 

C /C++, Java의 경우 if문 다음에 오는 코드가 오직 한 줄 뿐이라면 중괄호 생략이 가능합니다. 비슷하게, Python의 경우 다음에 오는 코드 한 줄이라면, if문과 같이 한 줄에 다음과 같이 작성할 수 있습니다.

 

if( 조건문 ):  실행할 내용

 

만약 조건이 여러개라면 else if(또는 Python의 경우 elif)문을 사용하고, 나머지는 else문으로 처리할 수 있습니다.

 

if( 조건문 1 ){
	실행할 내용 1;
}
else if( 조건문 2 ){
	실행할 내용 2;
}
else if( 조건문 3 ){
	실행할 내용 3;
}
else{
	실행할 내용 4;
}

if( 조건문 1 ):
    실행할 내용 1
elif( 조건문 2 ):
    실행할 내용 2 
elif( 조건문 3 ):
    실행할 내용 3 
else:
    실행할 내용 4

위와 같은 코드는 조건문 1부터 차례로 조건을 판별하며, else if는 그 위의 같이 연결된 if와 else if가 다 거짓일 때 조건을 판별하게 됩니다. (만약 조건문 1이 틀리고 조건문 2가 맞다면, 실행할 내용 2까지만 실행됩니다.

 

 if문의 또다른 활용방법은 중첩하여 사용하는 것입니다. 이 경우 복잡한 상황에 이용해 볼 수 있습니다.

 

if( 조건문 1 ){
	if( 조건문 2){
    	실행할 내용 2;
    }
	실행할 내용 1;
}

 

if( 조건문 1 ):
    if( 조건문 2 ):
        실행할 내용 2
    실행할 내용 1

 

Python의 경우 한 블럭 내에 코드가 한 줄도 없는 경우 pass문으로 빈 블럭을 채워 컴파일러가 코드의 블럭을 구분할 수 있게 해야합니다.

 

if( 조건문 1 ):
    pass

이 경우 pass문을 만났을 때 아무 일도 일어나지 않고 코드가 진행됩니다.

 

그러면 조건문에 어떠한 코드가 들어가는 지 알아보겠습니다.

일단 먼저, 그 전에 이러한 조건문에 사용할 수 있는 논리 연산자와 관계 연산자들(+ 자주 사용되는 메소드/함수들)을 알아보겠습니다. (그 외에도 많은 메소드/함수, 연산자들이 존재합니다)

분류 연산자 설명 C/C++, Java 연산자
(혹은 메소드)
Python 연산자 비고
관계

좌변 > 우변인지

> > Python에서는 문자열 비교 가능
(ASCII코드를 앞에서 부터 비교)
좌변 < 우변인지
< <
좌변 ≥ 우변인지 >= >=
좌변 ≤ 우변인지 <= <=
좌변 = 우변인지 == == 기본 자료형 및 문자열 (C/C++/Python) 
(단, C언어는 문자열 제외)
기본(Primitive) 자료형 (Java)

객체의 경우 객체의 id를 비교함.(C++,Java)

문자열 비교는 Java에서 .equals 메소드를 이용합니다. (ex: A.equals(B))

좌변 ≠ 우변인지 != !=
논리 (조건)의 부정 ! not '!조건'또는 'not 조건'과 같이 사용함.
(조건) 이 모두 참인지 && and '조건1 && 조건2'
또는 '조건1 and 조건2'처럼 사용.
 (조건)이 적어도
하나가 참인지
|| or '조건1 ||조건2' 또는
'조건1 or 조건2'와 같이 사용함.
  포함여부 (JAVA) .contain
메소드
in 리스트 내 포함 여부
'in 리스트'와 같이 이용
Python은 문자열 내 포함 여부도 가능
  객체 내용 비교 (Java) .compareTo
메소드 
 

Integer와 같이 Wrapper Class간의 비교
(현재 객체가 더 크면 양수, 작으면 음수, 같으면 0)
(ex: A.compareTo(B))

 

나머지는 다 간단하지만, 객체의 개념이 존재하는 언어의 경우 동등하다라는 의미를 어떻게 해석하는 지에 따라서 약간 복잡하게 나뉩니다. 비객체의 비교는 간단하지만, 객체의 경우 객체가 가지고 있는 내용이 같은 것인지, 객체 자체가 같은 것인지로 나눌 수 있기 때문입니다.

 

일단 객체에 관한 한 이 것만 기억하면 될 것같습니다.

문자열 비교는 ==가 내용을 비교한다!(C++/Python) 그러나 Java는 객체 자체를 비교한다! 따라서 Java String의 비교에는 .equals()메소드를 사용하자!

(C언어에는 객체의 개념이 없음에 유의하세요!)

(C++의 객체 내용 비교는 연산자 오버라이딩이나 주소를 가지고 비교합니다. 이후 다시 다루겠습니다.)

 

이를 토대로 조건문을 작성해봅시다. (사전에 정의되어 초기화된) 정수형 변수 num1에 들어 있는 값이 10이고, 같은 자료형의 num2에 들어 있는 값은 9일 때에만 if문 블럭을 실행하는 코드를 예로 들어봅시다.

 

if((num1 == 10) && (num2 == 9)){
	실행 내용;
}

if((num1 == 10) and (num2 == 9)):
    실행 내용

 

문자열을 비교하여 같은 경우 같다는 문자열을, 아니면 아니라는 문자열을 출력하는 예시를 작성하면 다음과 같습니다.(역시 기본적인 main함수/메소드 등은 생략했습니다.) 참고로 C언어 코드의 경우 문자열이 배열로 저장되어 값 비교를 위해선 반복문으로 일일히 문자를 비교하거나, string.h의 strcmp함수를 이용해야 하므로 생략했습니다. (객체 지향이 아닌 언어의 서러움 ㅠㅠ)

아래 예시는 모두 EQUAL을 출력합니다.

string str1 = "Hello";
string str2 = "Hello";

if(str1==str2){
	cout<<"EQUAL"<<endl;
}
else{
	cout<<"NOT EQUAL"<<endl;
}

String str1 = "Hello";
String str2 = "Hello";

if(str1.equals(str2)){
	System.out.println("EQUAL");
}
else{
	System.out.println("NOT EQUAL");
}

str1 = "NICE"
str2 = "NICE"
if(str1 == str2):
	print("EQUAL")
else:
	print("NOT EQUAL")

 

Comments