일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- POP
- OOP
- 함수형프로그래밍
- 부스트코스
- 아이폰프로그래밍
- IOS
- 의도
- 문법
- SWIFT
- 협업
- Solid
- DesignPattern
- fp
- 고차함수
- 이름
- iOS프로그래밍
- 함수형패러다임
- 개발자
- 인터페이스
- interface
- CleanCode
- 객체지향프로그래밍
- 개발
- protocol
- Swfit
- 네이밍
- 클린코드
- 클린소프트웨어
- 디자인패턴
- 의존성
- Today
- Total
밤에 쓴 코드
ViewController의 특징과 생명주기 Responsibility (뷰컨트롤러의 책임) 주요한 데이터의 변화에 응답으로 뷰들의 컨텐트들을 업데이트 한다. 뷰들과 함께 사용자와의 대화에 응답한다. - 이벤트 핸들링 뷰들의 사이즈 재조정과 전반적인 인터페이스의 레이아웃을 관리한다. 다른 객체(뷰컨트롤러 등)들과 함께 앱을 구성한다. ViewController Type 뷰컨트롤러는 두가지 타입이 존재한다. 일반적으로 흔히 보는 인터페이스 빌더로 생성시 기본으로 생성되는 ViewController는 Content View Controller에 해당한다. NavigationViewController / TabBarViewController 처럼 여러 개의 View Controller를 제어하는 뷰 컨트롤..

UITabBarController, UITabBar UITabBar 일반적으로 하단 모서리에 위치한다. radio - style 을 가졌다. - 하나가 선택되고 다중선택을 불가능하다. UITabBarItem을 하나 이상 가진다. backGround 이미지를 설정할 수 있다. tintColor 를 설정할 수있다 TabBar를 직접 생성하게 되면 TabBar 내의 TabItem 을 직접 추가 삭제 변경, 선택에 대한 응답을 제어하기 위해서는 delegate 가 필요합니다. UIToolBar ToolBar 는 작업 집합들을 관리한다.현재 뷰와 관련된 작업을 보여준다. UITabBar TabBar는 앱의 모드를 관리하고, 앱 전체와 관련이 있다. Attributes Description Associated Pr..
단위테스트 개념 테스트가 가능한 (최소)단위-모듈로 나누어진 소프트웨어 내에서 결함을 찾고 기능을 검증하는 활동 TDD (테스트 주도 개발) 실제 코드를 직성하기 전에 실패하는 테스트 코드를 작성한다. 실패는 하지만 컴파일은 성공할 수 있게끔 작성한다. 테스트를 통과할 정도의 간단한 코드로 실제 코드를 작성한다 위의 3가지 원칙을 차례대로 지키면서 개발을 진행하며, 사이클을 계속적으로 수행한다. 그러면 테스트는 어떻게 작성해야 할까? '테스트 코드는 깨끗하게 작성하라' 라고 책에서 강조를 한다. 더러운 테스트 코드는 어떤 피해를 주는 지 한번 보자. 테스트 코드도 코드이다. 실제 코드가 변하게 되면, 테스트코드도 같이 변해야 한다. 테스트 코드가 더럽다면 또는 복잡하다면, 늘어가는 테스트 ..
객체와 자료구조 객체는 일을 한다 . 자료구조는 자료를 저장한다. 이 둘을 적절한 상황에 사용하기 위해 한번 공부해보자 우리는 객체를 디자인함에 있어서 , 객체의 내부의 변수를 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..
형식맞추기 코드형식은 의사소통형식이다. 가독성 수준은 유지보수 용이성과 확장성에 밀접하게 영향을 준다. 코드는 일차적으로 구현을 생각하고 , 기능이 수행되는 것에 만족해왔었다. 그 이유중 하나는 왜 깨끗하게 코드를 짜야할까? 의문을 가져본 적이 없었고, 그 이유를 몰랐었다. 왜냐면 난 학생이었고, 언제나 혼자 소프트웨어를 개발해왔었으며, 한번 완성된 소프트웨어에 기능을 수정하고, 기능을 추가하는 등, 변경되는 요구사항에 대해서 소프트웨어를 지속적으로 수정해 본 적이 없었다. 깨끗한 코드 ? 좋다는 건 알겠다. 깨끗한 코드 그게 기능구현의 중요성에 비해 노력을 투자할 가치가 많이 있는가? 를 항상 의심해왔다. 우리가 사용하는 소프트웨어는 대부분 단 한명의 개발자가 완성하지 않고, 많은 유능한 개발자들이 함..