일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 시간복잡도
- 파일 시스템
- windosws wbcs
- 암호수학
- 큐
- 재귀
- C
- 미로 탐색 알고리즘
- Java
- 두근두근 자료구조
- 스택
- LoB
- c언어
- ftz
- 파이썬
- PHP
- HTML
- System
- War Game
- level13
- web
- SWiFT
- OSI
- windosw 문자열
- pwnable.kr
- Stack
- 정렬 알고리즘
- 자료구조
- ftz level13
- Today
- Total
목록Programming (117)
나의 기록, 현진록
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bjJFvD/btq9R56QIzr/GEM9ZhzDFkTKxKMPUEg0w0/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 연산 프로퍼티와 저장 프로퍼티는 모두 타입을 정의하고 해당 타입의 인스턴스가 생성되었을 때 사용할 수 있는 인스턴스 프로퍼티입니다. 인스턴스 프로퍼티는 인스턴스를 새로 생성할 때마다 초깃값에 해당하는 값이 프로퍼티의 값이 되고, 인스턴스마다 다른 값을 지닐 수 있습니다. 각각의 인스턴스가 아닌 타입 자체에 속하는 프로퍼티를 타입 프로퍼티라고 합니다. 타입 프로퍼티는 타입 자체에 영향을 미치는 프로퍼티입니다. 인스턴스의 생성 여부와 상관없이 타입 프로퍼티의 값은 하나며, 그 타입의 모든 인스턴스가 공통으로 사용하는 값(C언어의 static constant와 유사), 모든 인스턴스에서 공용으로 접근하고 값을 변경할 수 있는 변수(C 언어의 static 변수와 유사) 등..
![](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/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/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 함수의 중첩은 함수 안에 함수를 넣을 수 있다는 의미인데 이전 글에서 사용했던 함수는 특별한 위치에 속해 있지 않는 한 모두 전역함수이다. 즉, 모듈 어디서든 사용할 수 있는..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kV4T3/btq9hNZoUrp/Q4X3nq3reznQ3uKGCrBJrK/img.png)
스위프트 프로그래밍 3판 - 야곰 지음 7.1 함수와 메서드 함수와 메서드는 기본적으로 같다. 다만 상황이나 위치에 따라 다른 용어로 부르는 것뿐이다. 메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수 함수 : 모듈 전체에서 전역적으로 사용할 수 있는 함수 즉, 함수가 위치하거나 사용되는 범위 등에 따라 호칭이 달라질 뿐, 함수라는 것 자체에는 변함이 없다. swift의 기본적인 함수 형태이다. func 함수이름(매개변수...) -> 반환타입{ 실행구문 return 반환값 } func hello(name: String) -> String{ return "Hello \(name)" } let helloJenny: String = hello(name: "Jenny") print(he..