일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부스트코스
- 의도
- 개발
- IOS
- 클린코드
- 이름
- DesignPattern
- 의존성
- 협업
- 인터페이스
- SWIFT
- Solid
- 아이폰프로그래밍
- 개발자
- OOP
- Swfit
- 고차함수
- 함수형프로그래밍
- fp
- 문법
- interface
- 객체지향프로그래밍
- 클린소프트웨어
- 함수형패러다임
- 네이밍
- POP
- protocol
- CleanCode
- 디자인패턴
- iOS프로그래밍
- Today
- Total
목록2019/06 (7)
밤에 쓴 코드
객체와 자료구조 객체는 일을 한다 . 자료구조는 자료를 저장한다. 이 둘을 적절한 상황에 사용하기 위해 한번 공부해보자 우리는 객체를 디자인함에 있어서 , 객체의 내부의 변수를 private로 감추어둔다. 외부의 객체가 내 변수에 의존하지 않게 하기 위해서 이다. 변수의 수정에 외부에 영향을 주지 않게 하기 위해서, 외부에서는 내 변수에 대해 아무것도 모르게 하려고 더 좋은 구조를 위해서 변수의 수정에 자유로울 수 있기 위해서이다. 객체는 내부의 구현을 숨기고 *객체가 무슨 일을 하는지 * 만을 공개한다. 자료구조는 내부의 변수(자료)를 공개하고 별다른 동작을 하지 않는다 struct MyPoint { private var x: Int private var y: Int func getX() -> Int ..
싱글턴 패턴 세상에 단 하나뿐인 특별한 객체 어떤 상황에서 필요한 패턴일까? 전역변수와의 차이는 무엇일까? 정보를 한곳에 모아두고 하나의 객체만이 그 정보를 관리해아하는 경우가 있다. 적당한 예로는 수강신청프로그램 이 있다. 수강신청이란 치열한 전쟁과도 같은데 성공적인 수강신청을 위해 1분1초를 다투며 마우스를 클릭한다. 만약 여러 수강신청플랫폼을 통해서 수강신청을 할 수 있다고 가정을 해보자. 수강신청알고리즘은 이런식으로 수강신청을 할 수 있다고 가정하자. int 정원 = 1 int 현재인원 = 0 public void 수강신청() { if ( 정원 > 현재인원 ) { 현재인원++; 수강성공출력(); } else { 수강실패출력(); } } 별 문제 없어보이는 데 어떤 문제가 생길까? 수강신청은 병렬로..
제네릭 제네릭은 일종의 자리맡기 타입 (place holder) 을 이용한 구현이다 배열과 딕셔너리 같이 많은 어떤 특정 조건만 준수하면 어떤 타입이든 수용할 수 있는 구조체들이 존재한다. Generic을 한국어로 표현하면 포괄적인,일반적인 이라고 표현됨을 인지하고 프로그래밍에서의 Generic을 이해해보자 일단 제네릭표현법을 코드로 작성해보겠다. 이전에 사용자정의 연산자를 인용하여 진행한다. infix operator func (lhs: inout Int, rhs: inout Int) { let temp = lhs lhs = rhs rhs = temp } 위와 같이 서로를 바꾸는 연산자를 구현했다. var a: Int = 1 var b: Int = 2 print("a: \(a) , b: \(b)") /..
사용자 정의 연산자 Swift 기본연산자 , ! , = , … 연산을 기호화하여 기호형태로 연산자 들을 지원한다. 함수도 하나의 연산이다. 함수를 연산자의 형태로 표현할 수도 있지 않을까? 사용자정의 연산자를 정의함으로써, 커스텀메소드를 부호화 할 수있다. Swift에서는 증감연산자를 기본적으로 지원하지는 않는다. 하지만 타 언어 ( Java,C++,…) 에서는 a++ , a—- 형태로 증감연산자를 지원한다. 하지만 Swift에서도 사용자가 정의하여서 사용할 수 있다. extension Int { mutating func increase() { self+=1 } mutating func decrease() { self-=1 } }위와 같이 Int 구조체를 확장하였다. var number: In..
형식맞추기 코드형식은 의사소통형식이다. 가독성 수준은 유지보수 용이성과 확장성에 밀접하게 영향을 준다. 코드는 일차적으로 구현을 생각하고 , 기능이 수행되는 것에 만족해왔었다. 그 이유중 하나는 왜 깨끗하게 코드를 짜야할까? 의문을 가져본 적이 없었고, 그 이유를 몰랐었다. 왜냐면 난 학생이었고, 언제나 혼자 소프트웨어를 개발해왔었으며, 한번 완성된 소프트웨어에 기능을 수정하고, 기능을 추가하는 등, 변경되는 요구사항에 대해서 소프트웨어를 지속적으로 수정해 본 적이 없었다. 깨끗한 코드 ? 좋다는 건 알겠다. 깨끗한 코드 그게 기능구현의 중요성에 비해 노력을 투자할 가치가 많이 있는가? 를 항상 의심해왔다. 우리가 사용하는 소프트웨어는 대부분 단 한명의 개발자가 완성하지 않고, 많은 유능한 개발자들이 함..
주석 주석은 기껏해야 필요악이다. - 로버트.C.마틴 책을 읽기전까진 , 주석은 읽기 편하게 설명을 해주고 있다고 느꼈고, 꼭 필요하다고 생각했었다. 코드를 읽는 것보다 주석을 읽으면 빠르게 이해되고, 이해가 안되는 코드도 주석을 읽고 보면 술술 읽혀 나갔던 적이 많았다. 하지만 이 책에서는 주석은 코드의 실패라고 한다. 내가 주석이 유용하다고 느낀 건 주석이 유용해서가 아니라 코드가 의도를 표현하지 못하고 복잡하고 명료하게 작성되서라는 것을 알게 되었다. "주석이 필요한 코드는 잘못 작성된 코드이다" 라고 생각된다. // 이름을 가져오는 메서드 func get() -> String { return self.name } 위와 같이 주석이 메소드의 동작을 설명해주는 주석을 보는 것보다는 func getNa..
Design Pattern) 데코레이터 패턴 기본샌드위치🥙를 맛있게 꾸며보자 서브웨이 샌드위치 가게에 가보자. 여러가지 기본 샌드위치 메뉴가 있는데 특별한 토핑을 추가할 수 있고, 사용자가 원하는 대로 더할 수 있거나 뺄 수 있다. 또 추가금액을 내고 토핑을 추가하는 경우도 있다. 토핑의 종류가 하나씩 추가됨에 따라서 ,우리가 만들 수 있는 샌드위치는 더더욱 다양해진다. 어떻게 하면 계속적으로 늘어나는 메뉴를 감당할 수 있을까? 아보카도 🥑 에그오믈렛 🍳 베이컨 🥓 더블치즈 🧀 X X X X X X X O X X O X X X O O X O X X X O X O X O O X X O X O O X X X O X X O O X O X O X O O O O X X O O X O O O O X O O O O ..