본문 바로가기

Swift

(50)
[Algorithm/Swift] BOJ(골드4) - 2573 빙산 안녕하세요 제인입니다 :) PS 글은 오랜만인 것 같은데.. 오늘은 백준 문제 중 하나를 정리해보려고 합니다! BFS 문제인데 한번 더 생각해야 될 부분이 있는 문제여서 정리해두면 좋을 것 같아서 처음으로 백준 문제를 가져와봤습니다. 바로 시작하겠습니다 ! 문제 링크 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 문제 풀이 간단하게 문제 요구 사항을 정리해보자면, 2차원 배열에 빙산의 각 부분별 높이 정보가 주어지는데, 인접한 칸이 0일 경우(그림에서 빈칸), 빙산이 일년마다 그 칸에 인접한 빈칸의 개..
[iOS] TDD와 Unit Test TDD(Test-Driven Development) 테스트 주도 개발(Test-driven development TDD)이란, 반복 테스트를 이용한 소프트웨어 방법론으로, 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나입니다. TDD 개발주기 Red: 실패하는 테스트 코드 작성 Green: 실패한 테스트를 통과하기 위한 최소한의 코드 변경 (테스트에 성공) Refactor: 테스트의 성공을 유지하면서 코드를 더 나은 방향으로 개선 일반 개발 방식 vs. TDD 개발 방식 일반적인 개발 방식은 요구사항 분석 → 설계 → 개발 → 테스트 → 배포의 형태의 개발 주기를 갖습니다. 해당 방식에서는 설계에 따라 기능 개발을 완료한 후 배포하기 전, 해당 코드의 안정성이나 버그가 없는지를 검사하..
[TIL] 20231205 KVO(Key-value observing) [공식 문서 번역] Key-value observing은 다른 개체의 속성에 대한 변경 사항을 개체에게 알릴 때 사용하는 Cocoa 프로그래밍 패턴입니다. 모델 간, 뷰 간 등 논리적으로 분리된 앱의 부분 간의 변경 사항을 전달하는 데 유용합니다. Key-value observing은 오직 NSObject에서 상속되는 클래스와 함께 사용할 수 있습니다. 정리 Key-value Observing은 Cocoa 프로그래밍 패턴 프로퍼티가 변경되면 이 사항을 다른 객체에 알리는 데에 사용됨 모델과 뷰 처럼 기능적으로 분리되어 있는 부분에서의 정보 전달에 적합 KVO를 사용하기 위해서는 객체가 NSObject를 상속받아야 함 사용 방법 1. @objc dynamic v..
[TIL] 20231128 프로토콜 좀 더 잘 사용하기 OOP에 대해 공부하다보니 Swift를 통한 객체 지향 설계에서 프로토콜이 매우 중요한 역할을 한다는 걸 알게 되었고 프로토콜을 정말 잘 사용하시는 분들의 코드를 보며.. 요즘 POP에 더 관심이 많아지고 프로토콜을 적극적으로 활용해보려고 노력하고 있슴돠.. 그래서! 새싹에서 정말 간단한 콘솔 프로그램을 과제로 구현하게 되었는데, 여기서도 공통된 부분을 묶어 객체를 추상화하고 다형성을 구현해 최대한 객체 지향 설계를 하기 위해프로토콜을 사용해보았습니당.. PR은 날렸지만 근데 뭔가 더더 묶을 수 있을 것 같애 .. 프로토콜 더 잘 활용할 수 있을 것 같애.. 이런 생각에 프로토콜을 좀 더 잘 사용할 수 있는 방법에 대해 찾아보게 되었다! 필요한 부분에 대해 서치해서 찾아본 정..
[Swift] Generic 안녕하세요 제인입니다 :)예전에 TIL로 정리했던 Generic에 대한 내용을 블로그에도 포스팅해두면 좋을 것 같아 쇽샥 해왔습니다 ㅎㅎGeneric에 대해 Apple의 Swift문서를 참고해서 정리해보려 합니다!Generic이란? generic은 포괄적인, 통칭의 정도의 사전적인 의미를 가집니다.그렇다면, Apple에서 소개하는 generic에 대해 한번 살펴보겠습니다!Generic이란 타입에 의존하지 않는 범용 코드를 작성할 때 사용합니다.Generic을 사용하면 중복을 피하고, 유연하고 재사용 가능한 코드를 작성할 수 있습니다.Generic은 Swift의 가장 강력한 기능 중 하나로, Swift 표준 라이브러리의 대부분은 Generic 코드로 작성되어있습니다.실제로, Generic을 사용했다는 것을..
[TIL] 20231124 Initalization (초기화) 초기화는 class, struct, enum의 인스턴스의 사용을 위해 준비하는 과정 새로운 인스턴스를 사용할 준비를 하기 위해 인스턴스의 저장 프로퍼티의 초기값을 설정하는 등의 일을 한다. 이니셜라이저 init 프로퍼티 초기값을 지정하기 어려운 경우에는 이니셜라이저 init을 통해 인스턴스가 가져야 할 초기값을 전달할 수 있다. 이니셜라이저는 새로운 인스턴스를 생성할 수 있는 특별한 메서드가 되는 것 주요 역할은 새 인스턴스가 처음 사용되기 전에 올바르게 초기화되었는지 확인하는 것이기 때문에 값을 반환하지 않음 initializer의 종류 클래스의 모든 프로퍼티는 초기화 과정에서 반드시 초기값이 할당되어야 함 상속받은 클래스가 있는 경우, 상위 클래스의 프로퍼티도 모두..
[TIL] 20231123 구조체(struct)와 클래스(class) 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용함 구조체와 클래스는 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가질 수 있다. 클래스나 구조체를 정의한다 == 하나의 새로운 사용자 정의 데이터 타입을 만들어 주는 것 구조체 vs. 클래스 구조체와 클래스 비교(공식문서 번역, WWDC 자료 참고) 공통점 값을 저장할 프로퍼티를 정의할 수 있다. 기능을 제공하는 메서드를 정의할 수 있다. 서브스크립트를 정의할 수 있다. 이니셜라이저를 통해 초기 상태를 설정할 수 있다. extension을 사용해 기능을 확장할 수 있다. 특정 종류의 표준 기능을 제공하는 프로토콜을 준수하는 것이 가능하다. 차이점 class 참조 타입(Re..
[TIL] 20231122 Optional 🔽 Optional과 Optional Unwrapping에 대한 내용 정리 [Swift] Optional 안녕하세요 제인입니다 :) TIL을 작성하다가 옵셔널에 대해 정리를 하게 되었는데요, 그냥 옵셔널 뽀개기로 제대로 정리를 하자 싶어서 Optional에 대한 공식문서와 깃허브에 오픈된 Optional 내부 구 janechoi.tistory.com + Optional 타입의 값을 == 연산자로 비교할 수 있는 이유? Optional의 값 비교가 가능한 이유는 Swift에서 Optional을 구현할 때, ==, =! 연산자를 구현해두었기 때문 Equatable 프로토콜을 채택하여 == 연산자를 구현하는 내부 코드를 확인할 수 있음 extension Optional: Equatable wh..