안녕하세요. 도미닉입니다. 오늘은 Enum 에 대해서 알아보겠습니다. Enum 은 항목을 묶어서 표현할 수 있는 타입입니다. 예를 들어 무게에는 kg, g, mg 등이 있습니다. 아래와 같이 표현할 수 있습니다. Enum 을 선언할 때는 첫 글자를 대문자로 선언해주어야 합니다. 이러한 Enum (열거형) 을 사용하면 장점이 weight 라는 단위는 mg, g, kg 중에 하나라고 단정지을 수 있습니다. 이러한 점이 별거 아닌 것 같아보일 수 있겠지만 weigth 라는 변수, 상수가 다양한 타입의 무궁무진한 값을 가질 수 있는 것에서 우리가 예측할 수 있는 값만 가질 수 있게 된다는 것은 엄청난 차이점이고 중요한 점이라고 생각합니다. 아래에서 Enum 의 다양한 사용방법을 알아보겠습니다. 1. CaseIt..
안녕하세요. 도미닉입니다 오늘은 패턴에 대해서 알아보겠습니다. 패턴이란 소스의 양을 줄여서 쓰고 읽기 쉽게 정해놓은 구조 라고 생각할 수 있습니다. 패턴 매칭이란. 코드에서 패턴을 찾아내고 활용하는 것이라고 할 수 있겠습니다. 패턴에는 두가지 큰 유형이 있습니다. 모든 종류의 값에서 성공적으로 동작하는 패턴과 런타임 안에 지정된 값에 따라서 동작하지 못하는 패턴입니다. 첫 번째 종류의 패턴은 단순 변수, 상수 및 옵셔널 바인딩에서 값을 소멸시키는 데 사용됩니다. 여기에는 와일드 카드 패턴, 식별자 패턴 및 이를 포함하는 값 바인딩 패턴 또는 튜플 패턴이 포함됩니다. 이러한 패턴에서 타입 지정하여 특정 타입의 값만 일치하도록 제한 할 수 있습니다. 두 번째 종류의 패턴은 전체 패턴 일치에 사용되며, 여기서..
다형성 : 프로토콜을 준수하거나 클래스를 상속 받아서 서로 다른 객체들에 해당 기능이 있다고 예측해서 사용 가능한 것 프로토콜 : 조건, 딱지 상속 : 사이드 이팩트 많음 익스텐션(Extensions) : 사이드 이펙트 적음 사이드 이팩트 : Overloading(오버로딩) : 같은 이름의 메소드를 매개변수가 다르게 여러번 선언할 수 있는 것 Overriding(오버라이딩) : 상위 클래스에서 선언한 메서드를 하위 클래스에서 재정의해서 사용하는 것 추상화 : 특징을 뽑아내는 것 Indirection (간접 참조) : 서브스크립트 : literal(리터럴) : Closere(클로저) : Map(맵) : Equatable( 정규표현식 메서드 : 객체 내의 함수 초기상태 : 프로퍼티(property) : 객체..
1. 강제 언레핑 사용하지 마세요. 2. 커밋은 변경하는 최소 작업단위로 작게 나눠야합니다. 3. 특정한 함수 내부에서 exit() 처리하는 것은 좋지 않습니다. 4. 메서드 이름은 동사로 정하세요. 5. enum을 포함해서 타입을 만들때는 대문자로 시작하도록 만드는게 규칙입니다. 6. 서로 상관없는 값이니까 중첩해서 if 구문을 넣을 필요는 없습니다. 7. 변수 이름과 함수 이름이 동일한 것은 어색하네요. 8. inputFromUser()는 (Int, Int) 튜플을 리턴하는데, ladderMake(humanNumber, heightMax)는 매개변수를 따로따로 전달하는 이유가 궁금합니다. 튜플을 그대로 넘기는 건 왜 선택하지 않았나요? 9. 코드리뷰는 제가 일방적으로 고치라고 지적하는 방식이 아닙니다..
안녕하세요. 도미닉입니다. 오늘은 오버로딩과 오버라이딩에 대해서 알아보겠습니다. 오버로딩(overloading) 이란 같은 이름의 메소드를 매개변수가 다르게 여러번 선언할 수 있는 것을 의미합니다. 오버로딩에는 생성자 오버로딩과 메소드 오버로딩이 있습니다. init 생성자를 매개변수 숫자를 다르게 해서 두번 선언했습니다. 이러한 것을 생성자 오버로딩이라고 합니다. eat 메서드를 매개변수 숫자를 다르게 해서 두번 선언했습니다. 이러한 것을 메서드 오버로딩이라고 합니다. 오버라이딩(overriding) 은 상위 클래스에서 선언한 메서드를 하위 클래스에서 재정의해서 사용하는 것을 의미합니다. 위에 오버로딩의 예제를 들었던 소스에서 People 클래스의 eat 메서드를 선언했었습니다. Student 클래스는 ..
안녕하세요. 도미닉입니다. 프로토콜과 다형성에 대해 정리해보겠습니다. 프로토콜은 특정 역할을 하기 위해 메서드, 프로퍼티 등을 정의하는 것입니다. 프로토콜을 채택하면 해당 프로토콜에서 정의되있는 메서드, 프로퍼티를 무조건 구현해주어야 합니다. 위와 같이 Food 라는 프로토콜에 eat 메서드를 정의하였습니다. 스파게티 구조체가 Food 프로토콜을 채택하였으나 eat 메서드가 존재하지 않아서 오류가 발생하였습니다. 동그라미를 클릭해서 오류 해결을 자동으로 요청하니 아래와 같이 eat 메서드가 생기고 구현부가 생성되었습니다. 위와 같이 스파게티, 햄버거, 피자 구조체를 Food 프로토콜을 채택해서 작성했습니다. 이제 스파게티, 햄버거, 피자는 Food 프로토콜을 따르기 때문에 무조건 eat 메서드가 있다고 ..
안녕하세요. 도미닉입니다. 오늘은 TDD 를 이용해 vmgit 을 제작해보겠습니다. 가상으로 git 처럼 동작하는 프로그램을 Swift 로 작성해보려고 합니다. TDD 는 처음에 요구사항을 작성한 뒤에 아래의 3단계를 반복하며 개발하는 기법입니다. 요구사항을 테스트로 작성 -> 테스트를 통과할 최소한의 소스 작성 -> 리펙토링 우선 요구사항을 도출합니다. 1. init : init 명령어 뒤에 저장소명을 명령어를 실행하면 이름으로 저장소 공간을 생성합니다. 2. status local : local에 있는 저장소 내부 파일 상태를 출력합니다. 만약 저장소 이름이 없으면 전체 저장소 목록을 출력합니다. 3. checkout : 해당 저장소를 선택한 것을 표시하기 위해서 프롬프트 뒤에 저장소 이름을 붙여서 ..
앞에서 소개드린 구조체 안에 내용 중에 프로퍼티에 대해서 먼저 알아보겠습니다. 프로퍼티는 저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티로 나뉘어집니다. 첫번째로 저장 프로퍼티는 가변 프로퍼티와 불변 프로퍼티로 나뉩니다. 구조체는 기본적으로 모든 저장 프로퍼티를 포함하는 이니셜라이저가 자동으로 생성됩니다. 위에 Cat 구조체에서 그것을 사용해보았습니다. 저장 프로퍼티는 기본값을 설정할 수도 있으며 기본값이 있는 경우 이니셜라이저 없이 인스턴스 생성이 가능합니다. struct Coordinate { var x: Int = 0 var y: Int = 0 } let point: Coordinate = Coordinate() 만약 저장 프로퍼티가 옵셔널이면 해당 프로퍼티는 초기값을 넣어주지 않아도 됩니다. 지연 ..
오늘은 스위프트의 구조체에 대해서 알아보겠습니다. struct 이름 { 프로퍼티 메서드 } 위와 같은 형태로 선언할 수 있습니다. 예를 들면 고양이 구조체는 아래와 같이 선언할 수 있습니다. struct Cat { let name: String var age: Int } 구조체는 자동으로 생성된 이니셜라이저를 통해 생성할 수 있습니다. var yaong: Cat = Cat(name: "yaong", age: 5) 또는 아래와 같이 직접 이니셜라이저 메서드를 선언해줄 수 있습니다. init (nameEntred: String) { name = nameEntred age = 1 } 직접 이니셜라이저 메서드를 선언해주면 기본으로 생성된 이니셜라이저는 사용하실 수 없습니다. 위에서 인스턴스를 만들어주는 소스는 ..
- Total
- Today
- Yesterday
- Matlab
- 테라스캔
- 반복문
- 스위프트
- MySQL
- database
- 배열
- 단어
- Xcode
- C
- Apple
- 뇌를 자극하는 C 프로그래밍
- 데이터베이스
- 왕초보 영단어1
- 영어
- 형용사
- exercise
- 프로그램
- IOS
- Swift
- 리눅스
- 포인터
- terascan
- 애플
- 프로그래밍
- 시원스쿨
- 연습문제
- 뇌를 자극하는 C프로그래밍
- 함수
- 매트랩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |