일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 객체지향프로그래밍
- 인터페이스
- 아이폰프로그래밍
- protocol
- IOS
- Solid
- 클린코드
- DesignPattern
- CleanCode
- fp
- iOS프로그래밍
- 협업
- 의존성
- 문법
- POP
- 클린소프트웨어
- 디자인패턴
- 고차함수
- 함수형프로그래밍
- 부스트코스
- SWIFT
- OOP
- 이름
- 개발
- 네이밍
- 함수형패러다임
- Swfit
- 의도
- 개발자
- interface
- Today
- Total
밤에 쓴 코드
SOLID - 객체 지향 5 원칙 나쁜설계는 변경에 취약한 소프트웨어를 만든다 나쁜소프트웨어는 디른 곳에 영향을 주어서 A기능 수정이 B기능까지 영향을 주어 , 갑자기 엉뚱한 곳이 망가질 수있고 , 그에 따른 연쇄되는 수정이 동반되어야 할것이다. 또 서로 연관 없는 코드들이 결합되어 있기 떄문에 , 하나를 재사용하려고 해도 , 그에 관련된 코드들을 줄줄이 사용하지 않으면 시스템에 문제가 생길 것이다. 또 한 곳에서 동작이 이리저리 퍼지고 , 또 한곳에서 여러동작을 하게 되면 메소드의 이름도 모호해지고 , 하는 일도 명확해지지 않게 될 것이다. 이런 코드를 스파게티 코드 라고 부른다 . 이리저리 서로 얽히고 설켜서 , 끔찍한 코드를 보게 될 것이다 . 이 문제를 해결하기위한 많은 무기들이 있다 . 인터페이..
FP) Currying - 커링 여러개의 인수를 받는 함수를 하나의 인수를 받는 여러 함수로 쪼개는 작업을 커링 이라고 합니다. 커링이 왜 필요할까요 ? ㅡ ? 함수의 꼬리물기(함수의 합성)를 할때 , 특정함수A의 output을 특정함수B의 Input 으로 넣어서 함수가 꼬리에 꼬리를 물어 결과값을 도출하는 프로그래밍을 할 수 있습니다. 이렇게 함수를 합성할 때에 쉽게 함수의 합성을 이루어 내기 위해서는 함수의 인자가 하나이면 함수의 합성이 원활하게 이루어 질수 있습니다. func multifly(_ n1: Int,_ n2: Int) -> Int { return n1*n2 } 인수를 하나만 받는 함수로 줄여보겠습니다. func multifly(_ n1: Int) -> (Int) -> Int { func ..
Higher Order Function 1급객체로써의 함수 Swift 와 같은 함수형 프로그래밍 언어에서는 함수는 1급 객체 입니다 . 1급 객체는 이러한 특징을 가집니다. 함수의 인수의 역할을 할 수 있습니다. 함수의 반환형타입으로 지정할 수 있습니다. 이 두가지 를 보여줄 수 있는 예 함수의 합성을 보여드리겠습니다. func composition(_ f1:(A) -> B , _ f2:(B) -> C ) -> (A) -> C { return { input in return f2(f1(input)) } } 제네릭과 1급객체 함수로서의 특징을 적용한 예입니다. 함수의 꼬리 물기를 통해서 두개의 함수를 하나의 합수로 합성했습니다. f1이라는 함수는 A타입을 입력 받아서 B타입을 반환합니다. f2이라는 함수는..
Pure Function 함수형 프로그래밍에서의 함수는 기존의 함수와 메서드와는 구분하기 위해서 순수함수라는 표현을 사용합니다. 순수함수는 '특정 input에 대해서 항상 동일한 output을 반환하는 함수'를 의미합니다. 순수함수는 부수효과(side-effect) 가 존재 하지 않습니다. 부수효과가 존재한다는 것은 함수가 내부에서 일처리를 함에 다른 추가적인 효과들이 발생하는 것입니다. var sum = 0 func add(numbers:[Int]){ return numbers.reduce(sum,number) } 위의 예 와 같이 add라는 함수는 sum이라는 외부의 값을 사용하는 경우도 부수효과가 발생합니다. 함수에 동일한 입력을 넣는다고 해도 , 참조하는 외부의 값이 다를 경우 , ..
함수 중심 프로그래밍 패러다임 패러다임 시대별 사람들의 인식체계입니다, 시대별로 고민하는 문제에 따라서 패러다임은 변해갑니다. OOP 1990 년대 프로그래밍을 하는데에 있어서 많은 개발자들이 고민을 했던 것은 , 데이터를 어떻게 재사용을 할 수있을까 ? 어떻게 변화에 대응할 수 있을까 ? 데이터를 추상화하여 변화에 대응을 하고 , 그 과정에서 OOP 라는 객체 중심의 프로그래밍 패러다임이 발생하게 됩니다. FP 현대 사회에 와서 더 발전된 하드웨어를 가진 컴퓨터들이 나타나게 됩니다. 하나의 프로세스의 작업을 여러 코어로 나눠서 병렬 처리를 하고 , 또 , 여러 프로세스는 동시 처리 되어야 하고 , 개별적으로 수행된 결과를 모아서 다음 작업을 수행하기를 요구하게 됩니다. 그 과정에서 데이터에 동시접근은 ..
클로저 - Closures 클로저는 자신이 선언된 컨텍스트로부터 상수나 변수 저장하고, 붙잡아 둘수 있습니다. 클로저의 형태 전역함수는 이름을가진 클로저의 형태이고 , 값을 붙잡아 둘 수 없습니다. 중첩함수는 이름을 가진 클로저의 형태이고 , 자신을 가지고 있는 함수의 값을 붙잡아 둘 수 있습니다. 클로저표현식은 이름을 가지지 않은 클로저의 형태이고 , 자신 주위 컨텍스트의 값을 붙잡아 둘 수 있습니다. Closure Expression Syntax - 클로저 표현식 { (parameters) -> return type in statements } 정수형 배열을 문자열 배열로 변환하기 함수를 이용한 정렬 var numbers = [9,3,2,4,1,5,8,7,6,0] func asendingOrder(_..
옵저버 패턴 한 객체가 바뀌면 그 객체에 의존하는 다수의 객체들한테 연락을 보내고, 갱신되는 방식으로 일대다 의존성을 정의한다. 시계를 예로 들어보자. 시계들은 시간이라는 큰 개념에 의존하고 있다. 시간이 바뀌면 시계들은 내부의 상태를 변경해야하는 의무가 있다. 어떻게 표현하는게 좋을까? 알려주기 시간은 계속적으로 바뀔 것이고 , 시간을 담고 있는 Time 객체는 그에 따른 변화가 있을 것이다. Time 객체가 자기 자신이 바뀌었을 때, 모든 시계들에게 바뀌었다는 사실과 데이터를 알려주면 되겠다. 1.시간이 바뀌었을 때 시간값을 바꿔야하는 시계객체 2.날씨가 바뀌었을 때 날씨값를 바꿔야하는 기상정보어플객체 3.날짜가 바뀌었을 때 날짜값를 바뀌어야하는 달력객체 은 어떤 공통점이 있을까? 위의 3가지 객체의..
함수 함수는 작게 작게 작게 길어지면 읽기힘들다 인덴트가 2단 이상이면 읽기 힘들다 한가지만 해라 큰개념을 하는 메소드는 더 작은 개념을 수행하는 메소드들로 나누어야한다. 내부에서 의미있는 이름의 동작로 분할해 낼 수있다면 , 한가지 일을 하지 않는다는 증거이다. // 안좋은 예 func getCoffee()->Coffee{ let coffeeMenu = readLine() // 커피 메뉴를 입력 받는 의미있는 동작을 내부에 포함하고있다. let coffee = Coffee(menu:coffeeMenu) return coffee } // 사실상 어떤 커피를 만들지 입력을 받고 출력을 하고있다. TO문단으로 확인해보자 메소드명 하기위해서 , 코드 의 동작을 해야한다. func getCoffee(menu:S..