ios 개발 - 내배캠 19

[Swift] 프로그래머스 - 정수 제곱근 판별

샘플 테스트는 통과를 했지만 본 테스트에서 대부분의 상황에 시간 초과가 떴다. 그냥 보기에도 굉장히 비효율적으로 보인다.제곱근과 관련된 함수가 있는지 찾아보았고 sqrt()라는 함수를 알게 되었다.sqrt() 함수란 숫자의 제곱근(Square Root)을 계산하고, Foundation 프레임워크에 포함되어 있어 import Foundation이 필수이다.입력값과 반환값으로 모두 Double 타입만 가능하다는 특징이 있다.

[11/19 Swift] 프로그래머스 - 정수 내림차순으로 배치하기

문제를 보고 우선 String으로 변환해서 숫자를 분리해야겠다는 생각까지는 했다. 그다음에 숫자들을 하나하나 어떻게 비교해야 하는지 고민했다. 자료구조 시간에 배운 정렬 알고리즘 코드를 전부 쓰자니 복잡하다고 생각했고 블로그들의 도움을 받아서 sorted()라는 메서드 힌트를 얻었고 굉장히 간단하게 코드를 작성했다.애플 공식 문서의 sorted() 설명이다. sorted()를 쓰면 자동으로 순서대로 정렬해준다이 문제는 큰 수부터 작은 수 방향으로 정렬해야 해서 내가 필요한 코드는 이 코드였다

[11/18 Swift] 코드베이스 UI

SnapKit : 코드베이스로 UI 작성할 때 조금 더 간결한 문법을 사용하도록 도와주는 서드파티 라이브러리#selector() : 버튼 클릭 시 어떤 로직을 수행할 건지 담긴 메서드 작성touchDown : 사용자가 버튼을 터치하는 순간 발생touchUpInside : 사용자가 버튼을 터치한 후 손가락을 떼는 순간 발생offset() : 기준점에서 오른쪽, 위쪽 방향으로 띄우고 싶을 때 사용 / 반대 방향으로 띄우고 싶으면 마이너스 붙여야 함inset() : 어떤 방향에서든 사용

[11/11 Swift] 프로그래머스 - 자릿수 더하기

이 문제를 보자마자 생각한 풀이법은 우선 각 자릿수를 쪼개야겠다 였다. 그런데 어떻게 해야 쪼갤 수 있는지 몰랐고 구글링을 했더니 String을 써서 각 숫자를 불러낼 수 있었다. String은 Character 타입의 시퀀스로 구성된다고 한다. 시퀀스(sequence)란 '순서가 있는 데이터들의 나열'을 의미한다. 대표적인 타입으로는 Array, String, Dictionary가 있다. 시퀀스를 사용하면 데이터들을 차례대로 하나씩 순회할 수 있어 for문에서 많이 사용한다.Int(String(i))는 숫자형이 아닐 경우 nil을 출력해야하므로 옵셔널 타입이다. 이 코드에서는 숫자형인 게 보장되므로 강제 언래핑을 사용하고 있다. 다른 사람들의 풀이를 보다가 발견한 풀이법이다. 주어진 숫자를 10으로 나..

[11/6 iOSDev] Type Casting

타입캐스팅 : 인스턴스의 타입을 확인하거나 특정 타입으로 변환하는 방법. 형변환                    class 에서 상속 관계를 이용한 타입캐스팅이 주로 사용is 연산자 : 타입 체크. 타입이 특정 클래스이거나 하위클래스인 경우 true 반환, 아닌 경우 false 반환as 연산자(Upcasting) : 슈퍼클래스로 변환(구체적인 타입에서 범용적인 타입). 항상 성공as? 연산자(Downcasting) : 서브클래스로 변환. 성공 시 Optional 타입으로 리턴, 실패 시 nil 리턴as! 연산자(Downcasting) : 서브클래스로 변환. 성공 시 Optional 타입을 강제 언래핑한 타입, 실패 시 런타임 오류 20번째 줄 person 은 Animal 타입이지만 Person 으로 인..

[11/5 iOSDev] 객체지향 프로그래밍

Object Oriented Programming(OOP) : 프로그램을 여러 개의 객체로 나누어 설계하고 구현하는 프로그래밍의 패러다임객체 : class 의 인스턴스 / 지향 : 어떤 목표로 뜻이 쏠리다 / 프로그래밍 : 개발-> class 의 인스턴스를 사용하는 개발을 지향하는 프로그래밍 방식 객체지향 프로그래밍의 4가지 특징 - 캡슐화, 상속, 추상화, 다형성 캡슐화 : 객체의 프로퍼티와 메서드를 하나의 단위로 묶어서 관리하는 것 ex) 알약캡슐화 : 관련된 내용을 묶어놓는 것은닉화 : 접근제어자를 통해서 객체 내부의 데이터를 외부에서 접근하지 못하도록 감추거나 허용 범위를 설정하는 것상속 : 하위클래스가 상위클래스의 프로퍼티와 메서드를 물려받아서 사용하는 것상위클래스에서 제공하는 연산 프로퍼티와 ..

[11/4 iOSDev] Closure

클로저 : 이름 없는 익명함수. 함수와 기능은 완전히 동일, 형태만 다름             (함수는 다른 코드가 함수 이름으로 호출하지만 클로저는 굳이 이름이 없어도 호출할 수 있는 형태)             파라미터, 구현부, 반환타입으로 구성되어 있음. 데이터 타입으로 사용 가능 구현 방법 : { (파라미터) in                          구현부                          return                  }-> 리턴형 표기를 주로 안 함-> 파라미터 이름은 생략 가능(in 키워드까지 생략해야 함)-> $0 : 첫 번째 파라미터, $1 : 두 번째 파라미터... 호출 방법 : 변수이름( )  구현하고 즉시 호출은 { } 뒤에 ( ) 바로 사용  tr..

[11/1 iOSDev] Optional Unwrapping & Protocol & Extension

- 옵셔널 바인딩 if let값이 주어졌을 경우 if let 을 통해 언래핑을 하더라도 언래핑된 값은 해당 블록에서만 사용되기 때문에 블록을 벗어난 print 에서는 Optional(10)으로 출력된다 - 옵셔널 바인딩 guard let - 기본값 제공 - 강제 언래핑 : nil이 아님이 확실할 때 사용함. 지양하는 방식  - 프로토콜 자체는 기능을 구현하지 않으며, 오직 설계만 제공함- class, struct, enum 에서 프로토콜을 채택할 수 있으며, 프로토콜에서 정의한 프로퍼티와 메서드를 모두 구현해야 함- 프로토콜에서 정의된 프로퍼티는 항상 var 로 선언되어야 함- 프로토콜에서 정의하는 프로퍼티는 읽기 전용 { get } 또는 읽기-쓰기 가능 { get set } 으로 설정 가능함- 프로토콜..

[10/31 iOSDev] 계산기 만들기

오늘 드디어 프로그래밍 기초 주차 과제인 계산기 만들기를 시작했다. 구현 과정이 상세하게 적혀있어서 흐름을 어떻게 가져가면 되는지 조금이나마 감을 가질 수 있었다. 첫 번째 궁금한 점은 연산을 수행할 수 있는 클래스를 만들라고 해서 그럼 함수를 class 안에 작성해야 하는지 확신이 안 들었고 두 번째 궁금한 점은 숫자가 몇 개 입력되느냐에 따라 달라질 것 같은데 그걸 어떻게 해결하는지였다.튜터님께 질문을 드렸더니 연산식을 함수로 표현하면 된다는 답변과 지금 예시에 주어진 게 파라미터로 숫자 2개를 입력받는 것이기 때문에 파라미터로 2개만 작성하라고 하셨다.함수 반환형을 Int 로 정하면 무조건 정수형을 반환해야 하고 print 뿐만 아니라 return 도 작성해야 해서 코드가 길어졌다. 또한 연산이 불..

[10/30 iOSDev] Class & Struct

인스턴스 : class, struct, enum에서 실제 생성되어 메모리에 저장되는 값 class는 반드시 init 초기화를 제공해야 함. 단, 모든 프로퍼티에 default 값을 제공하거나 Optional 인 경우 생략 가능struct는 직접 init을 정의하지 않아도 모든 프로퍼티의 초기화를 자동으로 생성해 주는 Memberwise Initializer 기능을 제공함 ClassStructReference TypeValue Type인스턴스를 let 으로 만들어도 내부 프로퍼티 변경 가능불가능(var로 만들어야 함)메서드 내에서 프로퍼티 변경 가능mutating 키워드 사용해서 변경 가능상속 가능상속 불가능메모리에 오랫동안 저장X