일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자료구조
- 두근두근 자료구조
- OSI
- 미로 탐색 알고리즘
- SWiFT
- HTML
- ftz level13
- 시간복잡도
- Stack
- 재귀
- 정렬 알고리즘
- C
- 백준
- 암호수학
- windosw 문자열
- War Game
- ftz
- 큐
- level13
- pwnable.kr
- web
- LoB
- Java
- 파일 시스템
- System
- 파이썬
- windosws wbcs
- c언어
- PHP
- 스택
- Today
- Total
목록모두 보기 (256)
나의 기록, 현진록
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/z6lHA/btq9R56qDay/fbgoIZBMc97Yv3QkTmaw01/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경됨에 따라 적절한 작업을 취할 수 있습니다. 프로퍼티 감시자는 프로퍼티 값이 새로 할당될 때마다 호출됩니다. 이 때 변경되는 값이 현재의 값과 같더라도 호출합니다. 이 때 변경되는 값이 현재의 값과 같더라도 호출합니다. 프로퍼티 감시자는 저장 프로퍼티뿐만 아니라 프로퍼티를 재정의해 상속받은 저장 프로퍼티 또는 연산 프로퍼티에도 적용할 수 있습니다. 물론 상속받지 않은 연산 프로퍼티에는 프로퍼티 감시자를 사용할 필요가 없으며 할 수도 없습니다. 연산 프로퍼티의 접근자와 설정자를 통해 프로퍼티 감시자를 구현할 수 있기 때문입니다. 연산 프로퍼티는 상속받았을 때만 프로퍼티 재정의를 통해 프로퍼티 감시자를 사용합니다. 프로퍼티 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/crhyYG/btq9LruuB8l/RpSCdLTISp757cATz0KU01/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 연산 프로퍼티는 실제 값을 저장하는 프로퍼티가 아니라, 특정 상태에 따른 값을 연산하는 프로퍼티입니다. 인스턴스 내/외부 값을 연산하여 적절한 값을 돌려주는 접근자(getter)의 역할이나 은닉화된 내부의 프로퍼티 값을 간접적으로 설정하는 설정자(setter)의 역할을 할 수도 있습니다. 클래스, 구조체, 열거형에 연산 프로퍼티를 정의할 수 있습니다. 굳이 메소드를 두고 연산 프로퍼티를 사용하는 이유 인스턴스 외부에서 메소드를 통해 인스턴스 내부 값에 접근하려면 메소드를 두 개(접근자, 설정자) 구현해야 합니다. 또한 이를 감수하고 메소드로 구현한다 해도 두 메소드가 분산 구현되어 코드의 가독성이 나빠질 수 있습니다. 다만 연산 프로퍼티는 접근자인 get메소드만 구..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cZJxAH/btq9GtmAR0V/wikojRzRKKLgHiMrunLqzK/img.png)
인스턴스를 생성할 때 프로퍼티 값이 필요 없다면 프로퍼티를 옵셔널로 선언해줄 수 있습니다. struct CoordinatePoint{ var x: Int var y: Int } class Position{ //현재 사람 위치는 모를 수도 있습니다. var point: CoordinatePoint? let name: String init(name: String){ self.name = name } } //이름은 필수지만 위치는 모를 수도 있습니다. let currentPoint: Position = Position(name: "hyunjin") //위치를 알게되면 그 때 위치 값을 할당해줍니다. currentPoint.point = CoordinatePoint(x: 20, y: 10) 10.1.2 지연 저..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pubuN/btq9Dwi8kP5/y9G6zbXSRkKqUwVtb8sSW0/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 9.3 구조체와 클래스의 차이 같은점 값을 저장하기 위해 프로퍼티를 정의할 수 있습니다. 기능 실행을 위해 메소드를 정의할 수 있습니다. 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록 서브스크립트를 정의할 수 있습니다. 초기화될 때의 상태를 저장하기 위해 이니셜라이저를 정의할 수 있습니다. 초기 구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장할 수 있습니다. 특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있습니다. 다른점 구조체는 상속할 수 없습니다. 타입캐스팅은 클래스의 인스턴스에만 허용됩니다. 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있습니다. 참조 횟수 계산은 클래스의 인스턴스에만 적용됩니다. 두 타입..
스위프트 프로그래밍 3판 - 야곰 지음 9.1 구조체 9.1.1 구조체 정의 struct 구조체이름{ 프로퍼티와 메소드 } struct BasicInformation { var name: String var age: Int } var info: BasicInformation = BasicInformation(name: "hyunjin", age: 24) info.name = "abc" //변경 가능 info.age = 100 //변경가능 let subinfo: BasicInformation = BasicInformation(name: "rupy", age: 50) subinfo.name = "abc" //변경 불가 subinfo.age = 100 //변경 불가 구조체에 기본 생성된 이니셜라이저의 매개변수..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/vmqw7/btq9E4Tdfa0/Q0ObIJocm0pcbGrKgBFO9k/img.png)
테이블뷰 셀의 기본 기능 데이터소스와 델리게이트의 역할 테이블 뷰에 원하는 정보를 표시하고, 사용자 선택에 적절히 반응하는 테이블 뷰 구현을 위해 꼭 필요한 데이터소스와 델리게이트에 대해 알아보기 UITableView 객체는 데이터소스와 델이게이트가 없다면 정상적으로 동장하기 어려우므로 두 객체가 꼭 필요하다. MVC(Model-View-Controller) 프로그래밍 디자인 패턴에 따라 데이터소스는 애플리케이션의 데이터모델(M)과 관련 이 있으며, 델리게이트는 테이블 뷰의 모양과 동작을 관리하기에 컨트롤러(C)의 역할에 가깝습니다. 테이블뷰는 뷰(V)의 역할을 한다. 모델 : 데이터소스 뷰 : 테이블 뷰 컨트롤러 : 델리게이트 데이터소스(MVC - M) 테이블 뷰 데이터소스 객체는 UITableView..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cL0Rpv/btq9xKVPmcs/nsLBzx4K5pR8PXmEOwQHtK/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 var myName: String? = "hyunjin" myName = nil if myName != nil{ print("My name is \(myName)") }else{ print("myName == nil") } 위에서 사용한 if 구문을 통해 myName이 nil인지 아닌지 먼저 확인하는 것은 다른 프로그래밍 언어에서 NULL 값을 체크하는 방식과 비슷하다. 앞서 설명한 것처럼 옵셔널을 사용하는 의미도 사라진다. 그래서 스위프트는 조금 더 안전하고 세련된 방법으로 옵셔널 바인딩을 제공한다 옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용한다. 만약 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/czgKXU/btq9zFMOAQw/SMoihIu7bbzrOAUEZXzOs1/img.png)
테이블 뷰 동적 프로토타입 셀 하나를 디자인 해 이를 다른 셀의 템플릿으로 사용하는 방식 같은 레이아웃의 셀을 여러 개 이용해 정보를 표시할 경우 데이터 소스(UITableDataSource) 인스턴스에 의해 콘텐츠를 관리하며, 셀의 개수가 상황에 따라 변하는 경우에 사용 정적 셀 고유의 레이아웃과 고정된 수의 행을 가지는 테이블 뷰에 사용 테이블 뷰를 디자인하는 시점에 테이블의 형태와 셀의 개수가 정해져 있는 경우 사용 셀의 개수가 변하지 않음 테이블 뷰를 구성하기 위해 알아야 하는 개념 1. 셀 2. 델리게이트 3. 데이터소스 테이블뷰 셀은 테이블뷰를 이루는 개별적인 행으로 UITableViewCell 클래스를 상속 받는다. 이 클래스에 정의된 표준 스타일을 활용해 문자열 혹은 이미지를 제공하는 셀을..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/7OucT/btq9tHSkWyb/AQydkkKTlUKer1Ed2ks5R0/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 스위프트의 특징 중 하나인 안정성을 문법으로 담보하는 기능이다. 다른 언어에서는 찾아볼 수 없는 개념이기도 하다. 옵셔널은 선택적으로 값을 가질 수 있다. 즉, 값이 "있을 수도, 없을 수도" 있다. 안철수 같은 개념. 옵셔널의 개념은 함수형 프로그래밍 패러다임에서 자두 등장하는 모나드 개념과 나란히 할 수 있다. 모나드는 추후에 포스팅할 것이다. 옵셔널 변수 또는 상수 등은 데이터 타입 뒤에 ?를 붙여 표현할 수 있다. var myName: String = "hyunjin" myName = nil // error 옵셔널로 선언되지 않은 변수에 nil을 할당할 수 없다. var myName: String? = "hyunjin" print(myName) myName ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c3gvcQ/btq9wfHkgyW/vvS0M4PaG8RioV3SYD2uIk/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 7.3 중첩함수 swift는 데이터 타입의 중첩이 자유롭다. 열거형 안에 열거형, 클래스 안에 또 다른 클래스 구현이 가능하여 다른 프로그래밍 언어에서는 생각하지 못 했던 패턴을 자유롭게 만들어볼 수 있다. [Swift] 7 함수 / 함수 정의와 호출 / 매개변수 스위프트 프로그래밍 3판 - 야곰 지음 7.1 함수와 메서드 함수와 메서드는 기본적으로 같다. 다만 상황이나 위치에 따라 다른 용어로 부르는 것뿐이다. 메서드 : 구조체, 클래스, 열거형 등 특정 wisetrue.tistory.com 함수의 중첩은 함수 안에 함수를 넣을 수 있다는 의미인데 이전 글에서 사용했던 함수는 특별한 위치에 속해 있지 않는 한 모두 전역함수이다. 즉, 모듈 어디서든 사용할 수 있는..