swift
-
일급객체가 뭔데?Apple🍎/Swift 2025. 2. 18. 23:03
프로그래밍을 하다 보면 '일급 객체'라는 단어를 접하곤 하는데요. 이 '일급'이라는 어감과 실제 설명하는 내용 사이에 간극이 있습니다. 그래서 오늘은 어원부터 출발해서 일급객체가 실질적으로 의미하는 것이 뭔지 알아보려고 합니다. 역사적 배경 옛날 옛적 영국에 '크리스토퍼 스트레이치'라는 아저씨가 살고 있었어요. 그 당시 영국에는 본토 출신과 식민지 출신 사이에 차별이 있었고 1등 시민, 2등 시민으로 나누어 법적, 사회적으로 권리를 제한했어요. 일등시민은 투표권, 재산권등의 모든 권리를 가진 사람들이었고, 이등시민은 제한된 권리만 가진 사람들이었지요. 우리 프로그래밍 언어 설계에 푹 빠져 있던 크리스토퍼 아저씨는 프로그래밍 언어에도 이와 같은 차별이 있다는 것을 발견했어요. // 숫자는 변수에 저장할 수..
-
순수 함수란?Programming🧑💻/Functional Programming 2025. 2. 10. 23:22
수학에서 f(x) = x + 1 같이 함수는 x에 특정 값을 넣으면 항상 동일한 결과가 나옵니다. 프로그래밍에서 순수 함수도 이와 같은 원칙을 따릅니다. 항상 단일 값을 반환합니다 (동일한 입력에 대해 동이한 출력 반환)반환 값은 오직 입력 매개변수에만 기반하여 계산됩니다기존 값을 변경하거나 부작용을 일으키지 않습니다위의 원칙들을 따르면서 나타나는 다음 특성들 때문에 이를 '순수'하다고 합니다 입력과 출력의 관계가 순수하게 유지됩니다 (같은 입력 = 같은 출력)외부 세계와의 상호작용 없이 순수하게 계산만 수행합니다부작용 없이 순수하게 자신의 역할만 수행합니다 순수함수가 왜 필요한데?전통적인 클래스 기반 접근 방식의 문제점장바구니에 책이 포함되어 있을 때 할인을 해주는 비즈니스 로직을 구현한다고 해봅시다...
-
함수야 거짓말 하지마라Programming🧑💻/Functional Programming 2025. 2. 9. 23:07
함수 시그니쳐란? 함수 시그니쳐는 함수의 정체성을 나타내는 ID 카드와 같습니다. 함수의 이름, 매개변수 타입, 반환 타입을 포함하며,이를 통해 함수가 무엇을 받아서 무엇을 돌려주는지를 명확하게 알 수 있어야합니다. func functionName(parameterName: ParameterType) -> ReturnType { // 함수 구현}예를 들어, 사용자의 나이를 받아서 성인 여부를 반환하는 함수의 시그니처는 이렇게 됩니다func isAdult(age: Int) -> Bool { return age >= 18}위와 같이 함수의 시그니쳐들을 통해 해당 함수가 어떤 "역할을 하는지?" ,"어떤 값들을 필요로 하는지?", "어떤 결과값이 나올 수 있는지?"등의 함수의 동작을 예측할 수 있어..
-
SOLID한 코드를 써보자Apple🍎/Architecture pattern 2024. 7. 25. 22:36
단일 책임 원칙 (SRP)class AccountManager { func createAccount(for user: User) -> Account { /* ... */ } func closeAccount(_ account: Account) { /* ... */ }}class TransactionProcessor { func deposit(amount: Decimal, to account: Account) { /* ... */ } func withdraw(amount: Decimal, from account: Account) throws { /* ... */ }}class AuthenticationService { func login(username: String, passwo..
-
[Swift] Property 제대로 써보자.Apple🍎/Swift 2023. 12. 12. 15:22
간단한 함수를 계산 프로퍼티로 바꿔보자. 계산 프로퍼티(computed properties)는 겉보기에 인스턴스의 속성 값을 들고 있는 일반 프로퍼티처럼 보인다. 하지만 실제로는 계산 프로퍼티는 어떠한 값도 내부에 저장하지 않고 함수처럼 기능한다. 예를 들어 cookingTimer 라는 객체를 만들고 cookingTimer 안에는 남은 시간을 나타내는 secondsRemaining이라는 프로퍼티를 만들었다고 하자. 이 프로퍼티의 값을 get 해보면 다음과 같이 프로퍼티 값이 계속 변경되는 것을 볼 수 있다. cookingTimer.secondsRemaining // 409 // wait a bit cookingTimer.secondsRemaining // 404 // wait a bit cookingTi..