Kant's IT/Issue on IT&Security

엘릭서(Elixir), 함수형 프로그래밍과 동시성의 새로운 접근

Kant Jo 2025. 3. 4. 13:30

“함수형 프로그래밍에 대한 신선한 접근” 엘릭서 입문

 

“함수형 프로그래밍에 대한 신선한 접근” 엘릭서 입문

엘릭서가 많은 관심을 끌고 얼랭의 유산을 현대로 가져온 이유를 이해하기는 어렵지 않다. 엘릭서는 작업을 처리하는 방법에 대한 좋은 아이디어와 활발하고 열정적인 커뮤니티를 갖춘 프로그

www.itworld.co.kr

 

  • 엘릭서 개요
    • 얼랭(Erlang) 기반의 함수형 프로그래밍 언어
    • 동시성, 내결함성, 고가용성을 중점으로 설계
    • 변형을 최소화하고 부작용을 방지하는 코드 작성 유도
  • 엘릭서의 주요 기능
    • REPL 모드(IEx CLI)를 통한 상호작용형 코딩 지원
    • IO.puts() 함수를 사용하여 콘솔 출력
    • 변수 선언 시 키워드 불필요: my_var = "Hello Infoworld"
  • 컬렉션 타입
    • 목록(List)
      • 변경 불가능하며 '복제에 의한 수정' 방식
      • 예: books = ["Book1", "Book2"]
    • 튜플(Tuple)
      • 값 저장용으로 읽기 성능에 중점
      • 예: {1, 2, 3}
    • 키워드 목록(Keywords List)
      • 순서 있는 키-값 쌍, 함수의 명명된 인수에 사용
      • 예: [key1: "value1", key2: "value2"]
    • 맵(Maps)
      • 키-값 쌍으로 구성, 키는 무엇이든 가능
      • 예: %{"key1" => "value1", "key2" => "value2"}
  • 함수형 프로그래밍 기법
    • 고차 함수(Enum.map)
      • 컬렉션의 각 요소에 함수를 적용
      • 예: Enum.map(books, &String.length/1)
    • 패턴 매칭
      • 조건에 따라 다른 함수를 실행
      • casewhen을 활용한 안전한 조건문 사용
    • 파이프 연산자(|>)
      • 함수 결과를 체이닝하여 가독성 및 효율성 향상
      • 예: books |> Enum.map(&String.upcase/1) |> IO.puts()
  • 동시성(Actor 모델)
    • 엘릭서에서는 Actor를 사용하여 가벼운 프로세스 생성
    • spawn 함수를 사용해 독립적인 프로세스 실행
    • receive 구문으로 메시지 수신 및 처리
  • 모듈 사용법
    • 네임스페이스 역할을 하는 모듈을 사용하여 함수 관리
    • 모듈 정의 예
      defmodule BookFunctions do
      def myFunc do
        IO.puts("Hello from BookFunctions")
      end
      end
  • 루프와 내포
    • 엘릭서에서는 forwhile 루프 대신 재귀 및 함수형 연산 사용
    • Enum.each, Enum.map 등을 활용하여 반복 작업 수행
    • 내포(Comprehension)를 통해 간단한 루프 구현 가능
      for x <- 0..10, do: IO.puts x
  • 결론
    • 엘릭서는 안전한 함수형 프로그래밍을 제공하며, 특히 동시성에 강점을 보임
    • 불변 데이터 구조와 함수형 접근법은 보안상 이점을 제공
    • 시스템 내 오류 전파를 최소화하고, 메시지 기반의 통신을 통해 프로세스 격리를 보장