Ruby

조건문

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.

Boolean

'비교 수업'에서 비교 연산의 결과로 참(True)이나 거짓(False)을 얻을 수 있다고 배웠다. 여기서 참과 거짓은 '숫자와 문자 수업'에서 배운 숫자와 문자처럼 언어에서 제공하는 데이터 형이다. 이를 Boolean(불린)이라고 부르고 불린으로 올 수 있는 값은 true와 false 두가지 밖에 없다. 불린은 조건문에서 핵심적인 역할을 담당한다.

참고

조건문

조건문이란 주어진 조건에 따라서 에플리케이션을 다르게 동작하도록 하는 것이다.

조건문의 문법

if

조건문은 if로 시작한다. if 뒤에는 조건이 오고, 조건의 값이 될 수 있는 값은 Boolean이다. 조건의 값이 true라면 if 문 다음 행부터 end 행까지의 구간이 실행된다. 

아래 예제의 실행결과는 'result : true'다. if 뒤에 true가 왔기 때문에 if~end 구간이 실행된 것이다.

if true
    puts 'result : true'
end

다음 예제는 아무것도 출력하지 않을 것이다. if 뒤에 false가 왔기 때문에 if~end 구간이 실행되지 않은 것이다.

if false
    puts 'result : true'
end

다음 예제를 보자. 결과는 12345를 출력할 것이다. if 뒤의

if true
    puts 1
	puts 2
	puts 3
	puts 4
end
puts 5

다음 예제를 실행해보자. 결과는 5만 출력될 것이다.

if false
    puts 1
    puts 2
	puts 3
	puts 4
end
puts 5

루비에서는 if 문 뒤의 조건이 참이라면 if 문 다음 행부터 end 전 행까지의 구간이 실행된다.

else

if만으로는 좀 더 복잡한 상황을 처리하는데 부족하다. 아래 예제를 보자. 결과는 1이다.

if true
    puts 1
else
	puts 2
end

다음 예제의 결과는 2다.

if false
    puts 1
else
	puts 2
end

if 뒤의 값이 true라면 if 구문 다음 행부터 else 구문 이전 행까지가 실행되고, false라면 else 이후부터 end 구문 이전 행까지의 구간이 실행된다. 즉 else는 주어진 조건이 거짓일 때 실행할 구간을 정의하는 것이다.

elsif

elif를 이용하면 조건문을 좀 더 풍부하게 할 수 있다. 아래 예제를 보자. 결과는 2다.

if false
    puts 1
elsif true
	puts 2
elsif true
	puts 3 
else
	puts 4
end

다음 예제의 결과는 3이다.

if false
    puts 1
elsif false
	puts 2
elsif true
	puts 3 
else
	puts 4
end

다음 예제의 결과는 4다.

if false
    puts 1
elsif false
    puts 2
elsif false
	puts 3
else
	puts 4
end

elsif는 좀 더 다양한 케이스의 조건을 검사할 수 있는 기회를 제공한다. elsif의 특징은 if나 else와는 다르게 여러개가 올 수 있다는 점이다. elsif의 모든 조건이 false라면 else가 실행된다. else는 생략 가능하다.

unless

루비에서는 if문의 반대의 의미로 unless라는 조건문을 지원한다. if와 반대로 주어진 조건이 거짓인 경우 실행된다. 아래 예제의 실행 결과는 false만 출력된다.

unless true
  puts 'true'
end

unless false
    puts 'false'
end

조건문의 간결화

루비에서는 조건문을 간결하게 표현할 수 있다. 아래 예제를 보자.

if true
    puts 'true'
end

if false
	puts 'false'
end

 위의 조건문은 아래와 같이 간결하게 표현할 수 있다.

puts 'true' if true
puts 'false' if false

변수와 비교연산자

앞서 배운 변수와 비교연산자 그리고 조건문을 결합해보자. ID의 값으로 egoing을 입력해보고, 다른 값도 입력해보자.

puts 'input your ID:'
id = gets.chomp
if id == 'egoing'
    puts 'right'
else
    puts 'wrong'
end

위의 내용에서 gets 구문은 사용자가 입력한 값을 가져와서 id 값에 대입한다. 이때 사용자가 데이터를 입력할 때 엔터를 치게 되는데 줄바꿈에 해당되는 개행문자가 데이터에 포함되기 때문에 이를 제거하기 위해서 .chomp를 붙인 것이다. chomp의 의미는 지금은 몰라도 된다. 사용자가 입력한 값이 egoing이라면 right를 출력하고 그렇지 않다면 wrong를 출력한다.

조건문의 중첩

위의 예제에서 아이디와 비밀번호를 모두 검증해야 한다면 어떻게 하면 될까? 다음 예제를 보자.

puts 'input your ID:'
id = gets.chomp
if id == 'egoing'
    puts 'input your Password:'
    password = gets.chomp
	if password == '111111'
		puts 'right'
	else
		print 'wrong'
	end
end

if문 안에 다시 if문이 등장했다. 즉 사용자가 입력한 값과 아이디의 값이 일치하는지를 확인한 후에 일치한다면 비밀번호가 일치하는지 확인한 것이다. 이렇게 조건문은 조건문 안에 중첩적으로 사용될 수 있다.

논리 연산자

이제 논리 연산자를 알아보자. 논리 연산자는 조건문을 좀 더 간결하고 다양한 방법으로 구사할 수 있도록 도와준다.

and

and는 좌항과 우항이 모두 참(true)일 때 참이된다. 다음 예제를 보자. 결과는 1이다. and의 좌우항이 모두 true인 것은 첫번째 조건문 밖에 없기 때문이다. and 대신 &&를 사용할 수 있다.

if true and true
    print 1
end
if true and false
	print 2	
end
if false and true
	print 3
end
if false and false
	print 4
end

논리 연산자를 이용한 사례를 살펴보자. 다음 예제는 논리 연산자를 이용해서 이전 예제를 개선한 것이다.

puts 'input your ID:'
id = gets.chomp
print 'input your Password:'
password = gets.chomp
if id == 'egoing' and password == '111111'
    print 'right'
else
	print 'wrong'
end

중첩된 if문을 하나로 줄였다. 덕분에 코드의 복잡성도 낮아졌다. and는 아래와 같은 의미를 만든다.

"id의 값이 egoing이고 password의 값이 111111이면 참이다"

즉 and 연산자의 좌항과 우항이 모두 참일 때 전체가 참이 되는 것이다.

or

or는 or의 좌우항 중에 하나라도 true라면 true가 되는 논리 연산자다. 다음 예를 보자. 결과는 1,2,3이 출력된다. 마지막 조건문의 or는 좌항과 우항이 모두 false이기 때문에 false가 된다. or 대신 ||를 사용할 수 있다.

if true or true
    print 1
end
if true or false
	print 2	
end
if false or true
	print 3
end
if false or false
	print 4
end

다음 예제는 id 값으로 egoing, k8805, sorialgi 중의 하나를 입력하면 right가 출력되고, 그 외의 값을 입력하면 wrong를 출력하는 예제다.

puts 'input your ID:'
id = gets.chomp
if id == 'egoing' or id == 'k8805' or id == 'sorialgi'
    print 'right'
else
    print 'wrong'
end

위의 예제에서는 논리 연산자를 3개 사용했다. 2개만 사용하는 것이 아니라는 것을 보여주기 위한 예제다.

다음 예제는 id 값으로 egoing, k8805, sorialgi 중의 하나를 사용하고 비밀번호는 111111을 입력하면 right 그 외의 경우에는 wrong를 출력하는 예다.

puts 'input your ID:'
id = gets.chomp
puts 'input your Password:'
password = gets.chomp
if (id == 'egoing' or id == 'k8805' or id == 'sorialgi') and password == '111111'
    puts 'right'
else
    puts 'wrong'
end

위의 예제에서는 or와 and를 혼합해서 사용하는 방법을 보여준다. id 값을 테스트 하는 구간을 괄호()로 묶었다. 사용자가 id의 값으로 egoing 비밀번호를 111111을 입력했다면 연산의 순서는 아래와 같이 된다.

  1. (id=="egoing" or id=="k8805" or id=="sorialgi") : true가 된다.
  2. password=='111111' : true가 된다.
  3. True(1항) and True(2항) : true가 된다.

사칙 연산을 할 때 괄호부터 계산하는 것과 같은 원리다.

not

!는 부정의 의미로, Boolean의 값을 역전시킨다. true를 false로 false를 true로 만든다. 아래의 결과는 4다.

if !true and !true
	print 1
end
if !true and !false
	print 2	
end
if !false and !true
	print 3
end
if !false and !false
	print 4
end

참고

  • 봤어요 0명

댓글

댓글 본문