강좌 목록으로 돌아가기
AI019 전문가

프로그래밍 에릭슬

Elixir를 사용한 기능적이고 동시성 프로그래밍에 대한 포괄적인 안내서입니다. 객체 지향적 사고에서 함수형 사고로의 전환, 패턴 매칭, 불변성, 동시성 처리를 위한 액터 모델, 그리고 OTP를 활용한 견고한 분산 시스템 구축에 대해 다룹니다.

4.8
30.0h
981 학생들
10 lessons
0 좋아요
인공지능
수강 시작하기

강좌 개요

📚 콘텐츠 요약

엘릭서를 사용한 기능형 및 동시성 프로그래밍에 대한 종합 가이드입니다. 객체 지향 프로그래밍에서 기능형 사고로의 전환, 패턴 매칭, 불변성, 동시성의 액터 모델, 그리고 OTP를 활용한 강력한 분산 시스템 구축을 다룹니다.

기능형 프로그래밍의 아름다움을 통해 내구성 있고 동시적인 시스템을 구축하는 예술을 마스터하세요.

저자: 데이브 토머스

감사의 말: 조제 발림, 코리 헤인즈, 브루스 테이트, 제시카 커, 앤서니 에든, 채드 파워, 김 쇼어, 캔디 캐너민, 포토마크 인덱싱

🎯 학습 목표

  1. 엘릭서의 데이터 변환 모델과 전통적인 상태 기반 프로그래밍을 비교합니다.
  2. 상호작용 가능한 엘릭서 쉘 (IEx)을 구성하고 스크립트 및 컴파일을 통해 엘릭서 코드를 실행합니다.
  3. 매치 연산자 (=), 핀 연산자 (^), 와일드카드 (_)를 사용하여 데이터를 분해하고 검증합니다.
  4. 불변성의 이론적 및 실질적 영향을 성능과 메모리 관리 측면에서 설명합니다.
  5. 엘릭서의 내장 타입(값, 시스템, 컬렉션 타입 포함)을 식별하고 활용합니다.
  6. 변수 스코프 규칙과 with 표현식을 적용하여 복잡한 데이터 변환을 관리합니다.
  7. 표준 및 캡처(&) 표기법을 사용하여 익명 함수를 생성하고 호출합니다.
  8. 패턴 매칭과 재귀를 사용하여 모듈 내에 이름이 붙은 함수를 구현하여 복잡한 로직을 처리합니다.
  9. 가드 절과 기본 매개변수를 적용하여 함수 실행 흐름을 제어합니다.
  10. 리스트 분해 및 구성: 머리/꼬리 패턴 매칭을 사용하여 재귀적인 리스트 구조를 탐색하고 구성합니다.

수업

Lesson

This lesson introduces Elixir as a functional language focused on data transformation, emphasizing the importance of immutability and the use of the pipe operator for clean, predictable code. Students will also learn how Elixir’s actor-based concurrency model uses isolated processes and message passing to ensure thread safety and system scalability.

This lesson introduces the functional paradigm of Elixir, focusing on the core concept of data immutability and the use of pattern matching over variable mutation. Students will learn how to perform data transformations to create new values rather than modifying existing ones, ensuring predictable and thread-safe code.

This lesson explores foundational functional programming in Elixir, focusing on anonymous and named functions, module encapsulation, and the use of the pipe operator for data transformation. Students will also learn to leverage pattern matching and the `with` expression to handle complex, multi-step logic safely and effectively.

AI019: Recursive Lists and Data Structures (Lesson 4) explores the recursive nature of linked lists in Elixir, focusing on head-tail decomposition and the implementation of custom recursive functions. Students will learn to identify base cases, utilize the cons operator, and apply recursive patterns to perform efficient list operations.

This lesson explores the differences between greedy processing with the Enum module and lazy processing with the Stream module in Elixir. Students will learn to implement the Enumerable protocol and apply these concepts to perform memory-efficient data transformations and advanced string processing.

This lesson explores advanced Elixir control flow, focusing on pattern matching with case expressions, guard clauses, and the use of the with construct for error handling. Students will also learn to manage project structures using Mix and improve code quality through professional tooling like Credo and Dialyzer.

This lesson explores how to maintain persistent state in Elixir using recursive functions and Tail-Call Optimization (TCO) to keep processes alive. Students will learn to manage process lifecycles, handle message passing, and implement deterministic communication patterns in concurrent systems.

This lesson explores the fundamentals of the Open Telecom Platform (OTP) in Elixir, focusing on how behaviors, supervision trees, and I/O messaging enable the creation of fault-tolerant, distributed applications. Students will learn to implement GenServers and leverage the Error Kernel philosophy to build robust systems that effectively manage process lifecycles and inter-node communication.

This lesson explores advanced OTP architectures and the Five-Question Framework to achieve high-reliability state management in Elixir. Students will learn to design robust supervision trees and distributed systems by systematically defining environment constraints, focal points, and fault-tolerance strategies.

This lesson explores Elixir’s metaprogramming capabilities, focusing on how the language's homoiconic nature allows source code to be treated as data via the Abstract Syntax Tree (AST). Students will learn to design extensible software using protocols and macros while evaluating how static analysis tools like Dialyzer provide type safety without sacrificing dynamic flexibility.