대량의 데이터에 대해서 각각의 값에 연산을 수행하려면
일반적인 프로그래밍 언어에서는 for/while 등의 반복문을 써야하고,
이게 너무 귀찮으니까 조금이라도 편의성을 높이고자
함수형 언어에서 유래된 map연산이나 comprehension을 사용하는 데,
Julia에서는 이에 더해서 연산자와 함수에 마침표(.) 만 붙이면 벡터화 시켜주는 도트 연산자가 제공된다.
좀 더 자세하게 설명하자면,
줄리아에서 아무 '연산자 앞에' 혹은 아무 '함수 뒤에' 마침표 '.'를 붙이면 자동으로 벡터화 연산으로 바뀐다.
julia> [1,2,3] + 3
ERROR: MethodError: no method matching +(::Vector{Int64}, ::Int64)
(... 행렬에 정의된 더하기 연산자가 없다는 에러 발생. 이하 중략 ...)
julia> [1,2,3,] .+ 3
3-element Vector{Int64}:
4
5
6
이것은 '도트 연산자' 혹은 '벡터화 연산' 혹은 '브로드캐스팅'(broad casting)이라고 칭하는 데, 시스템이 제공한 함수 뿐만 아니라, 사용자가 만든 모든 함수에서 아무런 추가 설정없이 단지 마침표 하나만 붙여주면 벡터화 함수로 바뀐다..
함수형 프로그래밍에서 중요하게 여겨지는 map()함수와 거의 같은 역할을 한다.
추가> 함수와 연산자 간에 브로드캐스트 연산자(.)의 위치가 서로 다른 이유.
함수가 구조체의 멤버일 경우, 구조체와 멤버를 구분하는 '점'과 브로드캐스트 연산을 의미하는 '점'이 동일한 위치에서 문법적으로 충돌하게 되므로, 함수의 브로드캐스트 연산자 '점'은 어쩔 수 없이 함수 '뒤'에 붙여야 한다.
반면, 연산자의 경우, 매트랩(MATLAB)이라는 행렬 연산에 특화된 프로그래밍 언어에서 일반 연산자 '앞'에 점을 추가하여 브로드캐스트 연산을 표기하는 데, 기존 매트랩 언어 사용자가 줄리아 언어로 전환할 때를 고려해서 매트랩 언어와의 호환성을 고려하다보니 (함수처럼 '뒤'가 아닌) 연산자의 '앞'에 붙는다고 한다.
참고자료 : 줄리아 프로그래밍 by 류대식, 전기현
R, Python, Julia 구문 간단 비교. (0) | 2024.05.10 |
---|---|
Julia DataFrame 문서 (0) | 2023.05.16 |
Julia의 메소드 (0) | 2023.04.29 |
Julia 문법이 마음에 드는 점. (0) | 2023.04.29 |
Julia (0) | 2023.04.27 |