Julia 트랙 전체에서는 풀이를 작은 라이브러리처럼 다뤄야 해요. 즉, 함수나 타입 등을 정의하고, 그것들이 테스트 스위트에서 실행되도록 만들어야 해요. 그래서 가장 먼저 이름 있는 함수를 첫 번째 개념으로 소개할게요.
Julia는 동적이면서 타입이 엄격한 프로그래밍 언어예요. 프로그래밍 스타일은 주로 함수형이지만, Haskell 같은 언어보다 유연성이 더 커요.
변수를 미리 선언할 필요가 없어요. 적당한 이름에 값을 할당하기만 하면 돼요.
julia> myvar = 42 # an integer
42
julia> name = "Maria" # strings are surrounded by double-quotes ""
"Maria"
어떤 값이 프로그램 전체에서 쓰일 수 있어야 하지만 바뀌지는 않아야 한다면, 그 값을 상수로 표시하는 게 가장 좋아요.
할당 앞에 const 키워드를 붙이면, 컴파일러가 변수를 쓸 때보다 더 효율적인 코드를 생성할 수 있어요.
상수는 코딩할 때 오류로부터 보호해 주기도 해요.
실수로 const 값을 바꾸려고 하면 경고가 나와요.
julia> const answer = 42
42
julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24
const는 함수 바깥에서만 선언할 수 있다는 점에 주의해요.
보통 *.jl 파일의 맨 위, 함수 정의보다 앞에 오게 돼요.
다른 많은 언어와 같아요.
2 + 3 # 5 (addition)
2 - 3 # -1 (subtraction)
2 * 3 # 6 (multiplication)
8 / 2 # 4.0 (division with floating-point result)
8 % 3 # 2 (remainder)
Julia에서 이름 있는 함수를 정의하는 일반적인 방법은 두 가지예요.
function 키워드 사용하기
function muladd(x, y, z)
x * y + z
end
4칸 들여쓰기가 가독성을 위해 관례적으로 쓰이지만, 컴파일러는 이를 무시해요.
end 키워드는 꼭 필요해요.
return x * y + z라고 쓸 수도 있었어요.
하지만 Julia 함수는 항상 마지막으로 평가된 표현식을 반환하므로, return 키워드는 선택 사항이에요.
많은 프로그래머는 의도를 더 분명히 드러내려고 이 키워드를 넣는 걸 선호해요.
"할당 형식" 사용하기
muladd(x, y, z) = x * y + z
간결한 단일 표현식 함수를 만들 때 가장 흔히 사용해요.
할당 형식에서는 return 키워드를 절대 사용하지 않아요.
두 형식은 동등하고 완전히 같은 방식으로 사용되므로, 더 읽기 쉬운 쪽을 고르면 돼요.
함수를 호출할 때는 함수 이름을 쓰고, 함수의 각 매개변수에 대응하는 인자를 전달해요.
# invoking a function
muladd(10, 5, 1)
# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)
많은 언어와 마찬가지로, Julia에서는 이름(변수, 함수, 그리고 여러 다른 것들의 이름)이 문자로 시작하고, 그 뒤에 문자, 숫자, 밑줄이 어떤 조합으로든 올 수 있어요.
관례상 변수, 상수, 함수 이름은 소문자로 쓰고, 밑줄은 합리적인 최소한으로만 사용해요.
이 연습 문제에서는 좋아하는 요리책에 나오는 근사한 라자냐를 만들 수 있도록 코드를 작성해 볼 거예요.
라자냐를 만드는 데 걸리는 시간과 관련된 네 가지 과제가 있어요.
expected_bake_time 상수를 정의해요. 이 상수는 라자냐를 오븐에서 몇 분 동안 구워야 하는지를 나타내요.
요리책에 따르면, 라자냐는 총 60분 동안 오븐에 있어야 해요.
julia> expected_bake_time
60
preparation_time 함수를 정의해요. 이 함수는 라자냐에 넣은 층의 개수를 인자로 받고, 각 층을 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 몇 분이 걸렸는지를 반환해요.
julia> preparation_time(4)
8
remaining_time 함수를 정의해요. 이 함수는 라자냐가 지금까지 오븐에 있던 실제 시간(분)을 매개변수로 받고, 라자냐가 오븐에 앞으로 몇 분 더 있어야 하는지를 반환해요.
julia> remaining_time(50)
10
total_working_time 함수를 정의해요. 이 함수는 두 개의 인자를 받는데, 첫 번째 인자는 라자냐에 넣은 층의 개수이고, 두 번째 인자는 라자냐가 오븐에 있던 시간(분)이에요.
이 함수는 라자냐 요리에 총 몇 분을 들였는지를 반환해야 해요. 이는 준비 시간(분)과 현재까지 라자냐가 오븐에 있던 시간(분)을 더한 값이에요.
julia> total_working_time(3, 20)
26
Exercism에 가입하고 Julia 트랙을 개념 35개연습 문제 128개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.