반응형

줄리아 Julia의 제어문 - if … else, for, break, continue, while, enumerate 에 대해 다룹니다.



2023. 12. 05 최초 작성




다음 사이트를 참고하고 ChatGPT의 도움을 받았습니다. 

https://techytok.com/lesson-control-flow/

https://docs.julialang.org/en/v1/manual/arrays/




Julia 개발 환경 구축은 다음 포스트를 참고하세요. 

 

Visual Studio Code 사용한 Julia 개발 환경만들기(Windows / Ubuntu / Macbook M1)

https://webnautes.tistory.com/2216 



Julia 강좌를 진행하고 있습니다.

 

Julia 강좌 1 - 변수와 데이터 타입

https://webnautes.tistory.com/2218 

 

Julia 강좌 2 - 함수, void function,  Optional positional arguments, Keyword arguments

https://webnautes.tistory.com/2220 

 

Julia 강좌 3 - 배열, 튜플, 딕셔너리

https://webnautes.tistory.com/2229 

 

Julia 강좌 4 - 제어문 if ... else, for, break, continue, while, enumerate

https://webnautes.tistory.com/2235 

 

Julia 강좌 5 - 브로드캐스팅(broadcasting)

https://webnautes.tistory.com/2240


Julia 강좌 6 - 변수 유효 범위( Variable Scope ) : 전역(global), 로컬(local)

https://webnautes.tistory.com/2247


Julia 강좌 7 - 모듈(module)

https://webnautes.tistory.com/2253 


Julia 강좌 8 - 타입(type)

https://webnautes.tistory.com/2260

 

Julia 강좌 9 - 패키지(package)

https://webnautes.tistory.com/2268 



if … else

조건에 따라 실행할 코드를 선택하도록 하려면 if … else 문을 사용해야 합니다. if … else 문은 주어진 조건이 참인지 거짓인지에 따라 서로 다른 코드 블록을 실행합니다. 



if 문의 기본 구조는 다음과 같습니다.  끝에 end를 써줘야 합니다.

 

if 조건
    # 조건이 참일 때 실행할 코드
end



if … else 문의 기본 구조는 다음과 같습니다.  끝에 end를 써줘야 합니다.

 

if 조건
    # 조건이 참일 때 실행할 코드
else
    # 조건이 거짓일 때 실행할 코드
end




예를 들어, 변수 x의 값이 5보다 큰지를 판단하는 코드를 작성해보겠습니다. 

 

# 변수 x에 10을 대입합니다.
x = 10

# 변수 x의 값이 10이므로 조건 x > 5는 참이 됩니다.
if x > 5
    # 조건이 참일 때 실행되는 코드가 실행됩니다.
    println("x는 5보다 큽니다.")
else
    # 조건이 거짓일 때 실행되는 코드는 실행되지 않습니다. 
    println("x는 5보다 크지 않습니다.")
end




if …  else 문을 사용하여 절대값을 구하는 함수를 작성해보겠습니다.

 

function absolute(x)
    # 변수 x의 값이 양수이거나 0이면 변수 x의 값을 그대로 반환합니다.
    if x >= 0
        return x

    # 변수 x의 값이 음수라면 변수 x의 값의 부호를 바꾸어서 반환합니다.
    else
        return -x
    end
end


println(absolute(-100))
# 100

println(absolute(100))
# 100

println(absolute(0))
# 0



두 개 이상의 조건을 사용하는 경우에는 다음 연산자를 사용하면 됩니다. 

 

  • & - and, 두 개의 조건이 모두 true인 경우에 true를 리턴하고 그렇지 않은 경우에는 false를 리턴합니다.  

 

  • || - or, 두 개의 조건 중 하나라도 true라면 ture를 리턴하고 그렇지 않은 경우에는 false를 리턴합니다. 

     주의할 점은 첫번째 조건이 true라면 두번째 조건은 검사하지 않습니다.



a = 10
b = 10
c = -10

if a > 0 && b > 0
    println("a, b 양수")
end

if b > 0 || c > 0
    println("b 양수 확인, c는 미확인")
end



실행 결과입니다. and(&&) 연산자를 사용해서 변수 a와 b는 둘다 양수라는 것이 확인하지만 or(||) 연산자를 사용한 경우에는 앞에 있는 조건으로 b가 양수인것만 확인되면 변수 c는 확인하지 않습니다.

 



둘 이상의 조건을 확인하려면 elseif를 사용하면 됩니다. 

 

function signOfNumber(x)
    if x < 0
        println("$(x)는 음수")
    elseif x > 0
        println("$(x)는 양수")
    else
        println("$(x)는 0")
    end
end

signOfNumber(-1)
# -1는 음수


signOfNumber(0)
# 0는 0


signOfNumber(1)
# 1는 양수




println 함수에서 변수를 출력하기 위해 $변수를 사용할 수 있습니다. 

 

a = 1
b = 2
c = 3

println("$a + $b = $c")
# 1 + 2 = 3

println("$a+$b=$c")
# 1+2=3

# $변수에 댜른 문자가 붙어 있는 경우에는 괄호를 다음처럼 해주어야 합니다.
# println("$a와 $b를 더하면 $c가 됩니다.") # 이렇게 하면 에러가 납니다.
println("$(a)와 $(b)를 더하면 $(c)가 됩니다.")
# 1와 2를 더하면 3가 됩니다.




for 

동일한 작업을 여러 번 반복하기 위해서 for문을 사용합니다.



다음은 간단한 for문 예제코드입니다. 

 

for문 다음에 오는 변수 i는 반복할때 마다 값이 바뀌는 변수입니다. 값이 바뀌는 범위는 in 다음에 오는 1:10으로 지정하고 있습니다. 1:10은 반복할 때마다 변수 i가 갖게되는 값의 범위의 시작값이 1이고 끝값이 10이라는 의미입니다. 반복할 때마다 값이 1씩 증가합니다. 

 

for문과 end문 사이에 반복할 코드가 추가됩니다. 여기에선 반복하는 코드가 변수 i의 값을 출력하는 println 함수입니다.  반복할 때마다 바뀌는 변수 i의 값을 출력합니다. 

 

for i in 1:10
    println(i)
end



실행결과 1에서 10까지 출력됩니다.

 

1

2

3

4

5

6

7

8

9

10



for 문을 다음처럼 적을 수도 있습니다. 

 

for i = 1:10
    println(i)
end



앞에서 예로 든 범위외에도  배열이나 튜플 등을 for문에서 사용할 수 있습니다. 이 경우에는 for 문을 반복하는 동안 배열이나 튜플의 원소에 접근할 수 있습니다.   



for문에 배열을 사용하는 예제코드입니다. for문을 반복하는 동안 배열의 원소를 하나씩 가져와 화면에 출력합니다.

 

for문 다음에 오는 변수는 반복할 때마다 배열의 원소가 바뀝니다.  반복할때마다 원소를 가져오는 배열은 in 다음에 지정되는 변수에 저장된 배열입니다. 

 

numbers = [1, 2, 3, 4, 5]

for number in numbers
    println(number)
end



배열 numbers에서 원소를 하나씩 가져와 출력합니다. 

 

1

2

3

4

5



break

 

for 문을 반복하다가 강제로 종료하려고 하는 경우 break 문을 사용하면 됩니다. 

 

# for 문을 반복하며 범위 1부터 100까지의 숫자로 변수 i의 값을 변경합니다.
for i in 1:100

    # 변수 i의 값이 5보다 큰 경우
    if i>5
        # for 문을 중단합니다.
        break

    # 변수 i의 값이 10보다 작거나 같은 경우엔
    else
        # 화면에 숫자를 출력합니다.
      println(i)
    end
end



실행하면 1에서부터 5까지 숫자를 출력합니다. for문은 1에서 100까지 반복하도록 되어있지만 변수 i의 값이 5보다 큰 경우 for 문을 중단하도록 break 문을 사용했기 때문입니다.  

 

1

2

3

4

5



continue

continue 문을 사용한 이후로의 코드를 실행하지 않고 다시 for 문의 다음 반복을 시작합니다.  

 

for i in 1:9

    # i가 3의 배수라면 짝을 출력한 후 줄바꿈을 합니다. 그리고 이후 코드를 실행하지 않고 for문의 다음 반복을 수행합니다.
    if i % 3 == 0
        println("짝")
        continue
    end

    # i가 3의 배수가 아닌 경우 i의 값을 출력합니다.
    print(i)
   
end



실행 결과입니다. 3의 배수가 아닌 한자리 숫자를 출력하고 숫자가 3의 배수이면 짝을 출력하고 줄바꿈을 합니다. 3의 배수인 경우 변수 i의 값을 출력하는 print 문이 실행되지 않았음을 볼 수 있습니다. 

 

12짝

45짝

78짝



while

while문은 특정 조건이 만족하는 동안 while 문에 속한 블록내 코드를 반복합니다. 



함수가 아닌 곳에서 while 문을 사용할 때에는 반복할때 사용할 변수 i를 사용한다고 global 키워드를 사용해줘야 합니다.

 

# while 문을 반복하는 동안 값을 증가/감소 시킬 변수를 정의해야 합니다. 여기에선 초기값을 0으로 합니다.
i=0

# while문 다음에 오는 괄호안에 조건을 적습니다. # 여기에선 변수 i의 값이 5보다 작은 동안 반복하도록 합니다.
while(i<5)
   
    # while문이 반복되는 동안 반복해서 실행할 코드를 여기에 추가합니다.

    global i # 전역변수 i를 사용한다고 해야 에러가 나지 않습니다.

    # 변수 i의 값을 출력합니다.
    println(i)

    # 변수 i의 값을 1 증가시킵니다.
    i += 1 # i = i + 1의 축약 코드입니다.

# while문의 블록이 끝나는 시점에 end를 적어줘야 합니다.
end




함수에서 while문을 사용할때에는 global 키워드를 적으면 안됩니다.  

 

function f()
    # while 문을 반복하는 동안 값을 증가/감소 시킬 변수를 정의해야 합니다. 여기에선 초기값을 0으로 합니다.
    i=0

    # while문 다음에 오는 괄호안에 조건을 적습니다. # 여기에선 변수 i의 값이 5보다 작은 동안 반복하도록 합니다.
    while(i<5)
       
        # while문이 반복되는 동안 반복해서 실행할 코드를 여기에 추가합니다.

        # 변수 i의 값을 출력합니다.
        println(i)

        # 변수 i의 값을 1 증가시킵니다.
        i += 1 # i = i + 1의 축약 코드입니다.

    # while문의 블록이 끝나는 시점에 end를 적어줘야 합니다.
    end
end

f()





Enumerate

enumerate 함수는 for문을 사용하여 배열의 원소에 하나씩 접근할때 인덱스를 같이 사용할 수 있게 해주는 함수입니다. 

 

x = ["a", "b", "c"]

for couple in enumerate(x)
    println(couple)
end
# 정수 타입의 인덱스와 배열의 원소로 구성된 튜플이 출력됩니다.
# (1, "a")
# (2, "b")
# (3, "c")



인덱스와 배열의 원소를 별도의 변수로 받는게 유용합니다.

 

x = ["a", "b", "c"]

for (index,value) in enumerate(x)
    println("index=$index value=$value")
end
# 정수 타입의 인덱스와 배열의 원소로 구성된 튜플이 출력됩니다.
# index=1 value=a
# index=2 value=b
# index=3 value=c




배열의 원소를 제곱하여 새로운 배열에 저장하려면 다음처럼 할 수 있습니다.

 

# 1에서 10까지 값이 저장되어 있는 배얼을 생성합니다.
# collect(1:10) : 1부터 10까지의 정수 범위( 1:10 )를 배열로 변환합니다.
array1 = collect(1:10)

println(array1)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# 0.0으로 채워진 배열을 생성합니다.
array2 = zeros(10)

for (i, element) in enumerate(array1)

    # array1 배열의 원소를 제곱하여 배열 array2에 저장합니다.
    array2[i] = element^2
end

println(array2)
# [1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0]



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts