분류 전체보기
-
예전 @IBInspectable @IBDesignable 글에서 Swift에서 사용하는 @ 키워드는 컴파일러에게 추가적인 속성이 부여되었음을 알리는 역할이라고 설명한 적이 있었다. 즉, 코드에 메타 데이터 (special attribute와 directive)를 추가하는 역할을 하는 키워드라고 생각하면 된다. 이번 글에서는 @키워드를 사용한 @discardableResult에 대해 설명해보고자 한다. 1. @descardableResult 기본 개념 descardable = 버릴 수 있는, result = 결과 즉, "결과를 버릴 수 있도록 하는 속성"을 추가로 부여한다는 키워드가 @descardableResult이다. 이 키워드가 함수에서 사용되는 키워드라는 점에서 볼 때, 함수에서 해당하는 결과는 "..
[Swift] @discardableResult란 무엇일까?예전 @IBInspectable @IBDesignable 글에서 Swift에서 사용하는 @ 키워드는 컴파일러에게 추가적인 속성이 부여되었음을 알리는 역할이라고 설명한 적이 있었다. 즉, 코드에 메타 데이터 (special attribute와 directive)를 추가하는 역할을 하는 키워드라고 생각하면 된다. 이번 글에서는 @키워드를 사용한 @discardableResult에 대해 설명해보고자 한다. 1. @descardableResult 기본 개념 descardable = 버릴 수 있는, result = 결과 즉, "결과를 버릴 수 있도록 하는 속성"을 추가로 부여한다는 키워드가 @descardableResult이다. 이 키워드가 함수에서 사용되는 키워드라는 점에서 볼 때, 함수에서 해당하는 결과는 "..
2024.04.18 -
깃은 복잡해보이지만, 간단히 요약해서 내 컴퓨터(로컬)에서 작업한 코드들을 깃(원격)이라는 공간에 올리는 것. 그게 전부이다. 이때, 내 컴퓨터에서 작업했던 파일을 깃이라는 곳에 올릴 때, 예상치도 못한 낯선 파일들이 올라갈 수 있다는 사실! 뭐…예를 들자면 Mac을 쓰는 분들에게는 익숙(?)하실 수도 있는 .DS_Store 같은 녀석..? *참고로! DS_Store 파일은 애플에서 정의한 파일 포맷을 의미하는 파일을 의미한다. 애플의 MacOS 시스템이 finder로 폴더에 접근하면 해당 파일이 자동으로 생기게 되는데, 이놈이 이제 계속 수정이 이루어지면 Conflict를 발생시키는 주 원인이라…이 파일이 본인 깃 레포에 한번 들어가면 PR을 한번 올릴 때마다 계속 Conflict가 발생할 수 있다. ..
[Git] .gitignore는 왜 필요하고, 어떻게 적용하는 것일까?깃은 복잡해보이지만, 간단히 요약해서 내 컴퓨터(로컬)에서 작업한 코드들을 깃(원격)이라는 공간에 올리는 것. 그게 전부이다. 이때, 내 컴퓨터에서 작업했던 파일을 깃이라는 곳에 올릴 때, 예상치도 못한 낯선 파일들이 올라갈 수 있다는 사실! 뭐…예를 들자면 Mac을 쓰는 분들에게는 익숙(?)하실 수도 있는 .DS_Store 같은 녀석..? *참고로! DS_Store 파일은 애플에서 정의한 파일 포맷을 의미하는 파일을 의미한다. 애플의 MacOS 시스템이 finder로 폴더에 접근하면 해당 파일이 자동으로 생기게 되는데, 이놈이 이제 계속 수정이 이루어지면 Conflict를 발생시키는 주 원인이라…이 파일이 본인 깃 레포에 한번 들어가면 PR을 한번 올릴 때마다 계속 Conflict가 발생할 수 있다. ..
2024.03.30 -
팀 블로그에 올린 글입니다! 팀에서 사용한 협업 문화, Code Review 스타일을 비롯한 컨벤션까지 내용을 담고 있어 기록하고자 개인 블로그에도 공유합니다. [iOS] 코드 리뷰 문화: 토스터 iOS팀이 코드 스타일과 구성을 깔끔하게 유지할 수 있는 이유 안녕하세요! 토스터 iOS팀 개발자 코딩하는 체대생, 민군입니다. TOASTER 어플을 앱스토어에 릴리즈한지 어언 2개월이 지나고 있는 지금 시점에서, 저희 iOS 팀의 첫 번째 팀블로그를 작성하고자 힘 velog.io
[GitHub] 코드 리뷰 문화 - 토스터 iOS팀이 코드 스타일과 구성을 깔끔하게 유지할 수 있는 이유팀 블로그에 올린 글입니다! 팀에서 사용한 협업 문화, Code Review 스타일을 비롯한 컨벤션까지 내용을 담고 있어 기록하고자 개인 블로그에도 공유합니다. [iOS] 코드 리뷰 문화: 토스터 iOS팀이 코드 스타일과 구성을 깔끔하게 유지할 수 있는 이유 안녕하세요! 토스터 iOS팀 개발자 코딩하는 체대생, 민군입니다. TOASTER 어플을 앱스토어에 릴리즈한지 어언 2개월이 지나고 있는 지금 시점에서, 저희 iOS 팀의 첫 번째 팀블로그를 작성하고자 힘 velog.io
2024.03.26 -
1️⃣ 내가 이 글을 쓰게 된 이유 프로그래밍을 조금이라도 배워본 사람이라면, 반복문의 대표주자로 for-in문이 있다는 것은 당연히 알 것이라 생각한다. Swift에도 당연히 for문을 지원하기에 평소 for-in 코드를 사용한 반복을 많이 사용하곤 했었는데, 반복을 목적으로 짠 코드에서 forEach문 역시 동일한 기능을 제공한다는 것을 다른 협업 팀원들의 코드에서 많이 확인할 수 있었다. 이에 그동안 나도 무지성 따라 치기(?) 스킬로 forEach라는 코드를 사용했지만, 사실 for문과 어떤 점에서 차이가 있는지, 성능 차이는 존재하는지에 대한 고찰이 없었기에 항상 공부하고 싶었던 내용이었다. 여기에 덧붙여, 최근 진행하던 프로젝트에서 iOS 멘토님에게 받은 피드백 중 하나가 "for + appe..
[Swift] for-in문과 forEach 사이의 차이, 그리고 고차함수(map, filter, reduce)의 활용까지1️⃣ 내가 이 글을 쓰게 된 이유 프로그래밍을 조금이라도 배워본 사람이라면, 반복문의 대표주자로 for-in문이 있다는 것은 당연히 알 것이라 생각한다. Swift에도 당연히 for문을 지원하기에 평소 for-in 코드를 사용한 반복을 많이 사용하곤 했었는데, 반복을 목적으로 짠 코드에서 forEach문 역시 동일한 기능을 제공한다는 것을 다른 협업 팀원들의 코드에서 많이 확인할 수 있었다. 이에 그동안 나도 무지성 따라 치기(?) 스킬로 forEach라는 코드를 사용했지만, 사실 for문과 어떤 점에서 차이가 있는지, 성능 차이는 존재하는지에 대한 고찰이 없었기에 항상 공부하고 싶었던 내용이었다. 여기에 덧붙여, 최근 진행하던 프로젝트에서 iOS 멘토님에게 받은 피드백 중 하나가 "for + appe..
2024.03.11 -
1️⃣ 빌더 패턴 (Builder Pattern)이 왜 필요하게 된 거지? 빌더 패턴 (Bulder Pattern)은 복잡한 객체를 생성하는 방법을 정의한 디자인 패턴이다. "복잡한 객체를 생성한다"는 말이 잘 와닿지 않을 수도 있어, 내가 주문했던 메뉴 중 가장 복잡했던 서브웨이 샌드위치를 예시로 들어보겠다. 서브웨이 샌드위치를 하나 시키기 위해서는 사소하게 주문해야 할 게 참 많았다. 빵은 어떤 것을 고를 거고, 치즈는 어떻게 할 거고, 야채는 어떤 것은 많이 넣고, 어떤 것은 빼고, 소스는 어떻게 하고... 등을 매번 일일이 주문하기 힘들었던 경험이 서브웨이에 한 번이라도 가본 적 있다면, 공감할 것이다. 이 상황을 iOS 개발자의 입장에서 를 객체로 바라보고 코드로 표현하면 아래와 같이 작성할 수..
[Design Pattern] 내가 보려고 정리하는 Swift 디자인 패턴 (4) - 빌더 패턴(Builder Pattern)1️⃣ 빌더 패턴 (Builder Pattern)이 왜 필요하게 된 거지? 빌더 패턴 (Bulder Pattern)은 복잡한 객체를 생성하는 방법을 정의한 디자인 패턴이다. "복잡한 객체를 생성한다"는 말이 잘 와닿지 않을 수도 있어, 내가 주문했던 메뉴 중 가장 복잡했던 서브웨이 샌드위치를 예시로 들어보겠다. 서브웨이 샌드위치를 하나 시키기 위해서는 사소하게 주문해야 할 게 참 많았다. 빵은 어떤 것을 고를 거고, 치즈는 어떻게 할 거고, 야채는 어떤 것은 많이 넣고, 어떤 것은 빼고, 소스는 어떻게 하고... 등을 매번 일일이 주문하기 힘들었던 경험이 서브웨이에 한 번이라도 가본 적 있다면, 공감할 것이다. 이 상황을 iOS 개발자의 입장에서 를 객체로 바라보고 코드로 표현하면 아래와 같이 작성할 수..
2024.02.26 -
1️⃣ 전략 패턴 (Strategy Pattern)이란? 전략 패턴(Strategy Pattern)은 특정 상황에서 사용하는 알고리즘을 캡슐화하여 런타임 내에 변경할 수 있게 해주는 디자인 패턴이다. 다시 말해, 사용되는 알고리즘을 별도의 클래스에 배치/분리하여 이 알고리즘 객체를 동적으로 교환할 수 있도록 만드는 패턴이다. 특정 상황? 알고리즘? 변경? 전략? 이 말들이 나도 처음에 잘 이해가 되지 않았기에 하나의 예시를 가지고 설명해 보겠다. 게임 캐릭터를 만드는 개발 업무를 담당하고 있다고 가정해 보자. 해당 캐릭터 클래스에는기본적으로 상대를 공격할 수 있는 attack()이라는 메서드가 포함되어 있다. 단, 캐릭터가 같은 공격을 하더라도 "공격 전략(Attack Strategy)"은 여러 개를 ..
[Design Pattern] 내가 보려고 정리하는 Swift 디자인 패턴 (3) - 전략 패턴(Strategy Pattern)1️⃣ 전략 패턴 (Strategy Pattern)이란? 전략 패턴(Strategy Pattern)은 특정 상황에서 사용하는 알고리즘을 캡슐화하여 런타임 내에 변경할 수 있게 해주는 디자인 패턴이다. 다시 말해, 사용되는 알고리즘을 별도의 클래스에 배치/분리하여 이 알고리즘 객체를 동적으로 교환할 수 있도록 만드는 패턴이다. 특정 상황? 알고리즘? 변경? 전략? 이 말들이 나도 처음에 잘 이해가 되지 않았기에 하나의 예시를 가지고 설명해 보겠다. 게임 캐릭터를 만드는 개발 업무를 담당하고 있다고 가정해 보자. 해당 캐릭터 클래스에는기본적으로 상대를 공격할 수 있는 attack()이라는 메서드가 포함되어 있다. 단, 캐릭터가 같은 공격을 하더라도 "공격 전략(Attack Strategy)"은 여러 개를 ..
2024.02.25 -
[UIKit] 재사용 Component 개발하기 (1) - Toast Message 💡 재사용 Component 개발하기 시리즈 글을 시작하며 이번 33기 앱잼이었던 프로젝트에서 우리 iOS 팀이 추구한 방향 중 하나는, 앱 내에서 반복되는 컴포넌트(내비게이션바, 바텀시트, 알림 창, 토 mini-min-dev.tistory.com 1️⃣ HIG 살펴보기 : 팝업창(Alerts)이란? 보통 팝업창으로 알고 있는 알림창을 iOS 공식문서에서는 정확하게 Alerts라고 부른다. Alerts는 사용자에게 "중요한 문제를 알리는 용도"로 사용한다. 여기서 말하는 "중요한 문제"란 해당 작업으로 데이터가 파괴될 수 있는 경우, 새롭게 시작하는 혹은 앱 안에서 발생한 어떤 중요한 작업에 대해 사용자에게 알리기 위한..
[UIKit] 재사용 Component 개발하기 (2) - 팝업창 (Alerts)[UIKit] 재사용 Component 개발하기 (1) - Toast Message 💡 재사용 Component 개발하기 시리즈 글을 시작하며 이번 33기 앱잼이었던 프로젝트에서 우리 iOS 팀이 추구한 방향 중 하나는, 앱 내에서 반복되는 컴포넌트(내비게이션바, 바텀시트, 알림 창, 토 mini-min-dev.tistory.com 1️⃣ HIG 살펴보기 : 팝업창(Alerts)이란? 보통 팝업창으로 알고 있는 알림창을 iOS 공식문서에서는 정확하게 Alerts라고 부른다. Alerts는 사용자에게 "중요한 문제를 알리는 용도"로 사용한다. 여기서 말하는 "중요한 문제"란 해당 작업으로 데이터가 파괴될 수 있는 경우, 새롭게 시작하는 혹은 앱 안에서 발생한 어떤 중요한 작업에 대해 사용자에게 알리기 위한..
2024.02.24 -
1️⃣ Delegate가 등장하게 된 이유 Delegate는 "대리자" "위임하다" 같은 뜻으로 번역되는 단어다. "위임하다"의 의미를 구체적으로 들어가보면, "당사자의 일방이 상대방에 대하여 '사무의 처리'를 위탁하고, 상대방이 이를 승낙함으로써 성립하는 것"이라고 한다. 즉, 쉽게 말해 Delegate는 "너가 나 대신 일 좀 해줘!" 라는 의미를 가지고 있는 단어다. (전문용어로 짬 때린다) "본인 일을 본인이 하면 되지 왜 남한테 떠넘겨?" 라고 할 수도 있지만, 사실 이 Delegate가 필요하게 된 상황을 보게되면 공감이 될 거다. 프랜차이즈 햄버거 가게 사장이 되었다고 예시를 들어보겠다. 불고기 버거와 치킨 버거 두 가지 메뉴만 판매하는 가게에서 햄버거 레시피는 우리 가게 프랜차이즈의 특성을..
[Design Pattern] 내가 보려고 정리하는 Swift 디자인 패턴 (2) - Delegate Pattern1️⃣ Delegate가 등장하게 된 이유 Delegate는 "대리자" "위임하다" 같은 뜻으로 번역되는 단어다. "위임하다"의 의미를 구체적으로 들어가보면, "당사자의 일방이 상대방에 대하여 '사무의 처리'를 위탁하고, 상대방이 이를 승낙함으로써 성립하는 것"이라고 한다. 즉, 쉽게 말해 Delegate는 "너가 나 대신 일 좀 해줘!" 라는 의미를 가지고 있는 단어다. (전문용어로 짬 때린다) "본인 일을 본인이 하면 되지 왜 남한테 떠넘겨?" 라고 할 수도 있지만, 사실 이 Delegate가 필요하게 된 상황을 보게되면 공감이 될 거다. 프랜차이즈 햄버거 가게 사장이 되었다고 예시를 들어보겠다. 불고기 버거와 치킨 버거 두 가지 메뉴만 판매하는 가게에서 햄버거 레시피는 우리 가게 프랜차이즈의 특성을..
2024.02.20 -
1️⃣ static : 타입 프로퍼티 (Type Property) 개념 정리 Swift의 static 키워드는 인스턴스 생성 여부와 상관없이 무조건 1개의 값만 존재하는 프로퍼티를 선언할 때 사용한다. 객체 지향 프로그래밍에서 처음 내가 어렵게 느꼈던 부분은 한 행위 또는 내용물에 대해 여러 표현법을 사용한다는 점이었다. 그래서 이 글을 읽는 다른 사람들은 과거의 나 같은 어려움을 느끼지 않았으면 하는 마음에서, 용어를 먼저 정리해보고자 한다. 인스턴스 = 클래스 혹은 구조체에서 찍어낸 결과물 = 붕어빵 틀에서 만들어진 붕어빵 = 객체 (매우 중요!) 생성 = 클래스 혹은 구조체에서 결과물을 찍어냄 = 변수 또는 상수에 클래스/구조체를 기반으로 한 값을 대입함 = 클래스/구조체에서 비롯된 객체가 메모리에..
[Design Pattern] 내가 보려고 정리하는 Swift 디자인 패턴 (1) - 싱글톤 패턴(Singleton Pattern)1️⃣ static : 타입 프로퍼티 (Type Property) 개념 정리 Swift의 static 키워드는 인스턴스 생성 여부와 상관없이 무조건 1개의 값만 존재하는 프로퍼티를 선언할 때 사용한다. 객체 지향 프로그래밍에서 처음 내가 어렵게 느꼈던 부분은 한 행위 또는 내용물에 대해 여러 표현법을 사용한다는 점이었다. 그래서 이 글을 읽는 다른 사람들은 과거의 나 같은 어려움을 느끼지 않았으면 하는 마음에서, 용어를 먼저 정리해보고자 한다. 인스턴스 = 클래스 혹은 구조체에서 찍어낸 결과물 = 붕어빵 틀에서 만들어진 붕어빵 = 객체 (매우 중요!) 생성 = 클래스 혹은 구조체에서 결과물을 찍어냄 = 변수 또는 상수에 클래스/구조체를 기반으로 한 값을 대입함 = 클래스/구조체에서 비롯된 객체가 메모리에..
2024.02.19 -
💡 재사용 Component 개발하기 시리즈 글을 시작하며 이번 33기 앱잼이었던 프로젝트에서 우리 iOS 팀이 추구한 방향 중 하나는, 앱 내에서 반복되는 컴포넌트(내비게이션바, 바텀시트, 알림 창, 토스트 메시지 등)를 재사용할 수 있도록 만드는 것이었다. 공통으로 반복되는 부분과, 변화가 필요한 부분을 고민해서 모듈화 시킨 과정을 이번 시리즈에서 같이 느껴볼 수 있길 바란다. 1️⃣ Toast Message란? 토스트 메시지(Toast Message)는 원래 안드로이드에만 존재하는 컴포넌트이다. 보통 앱 사용 중, 사용자와의 상호작용은 계속 열어둔 상황에서 동시에 짧은 메시지를 사용자에게 보여주기 위해 사용하는 컴포넌트다. 사용자의 인터랙션이 별도로 없어도 특정한 시간 뒤에 표출, 사라짐 동작이 자..
[UIKit] 재사용 Component 개발하기 (1) - Toast Message💡 재사용 Component 개발하기 시리즈 글을 시작하며 이번 33기 앱잼이었던 프로젝트에서 우리 iOS 팀이 추구한 방향 중 하나는, 앱 내에서 반복되는 컴포넌트(내비게이션바, 바텀시트, 알림 창, 토스트 메시지 등)를 재사용할 수 있도록 만드는 것이었다. 공통으로 반복되는 부분과, 변화가 필요한 부분을 고민해서 모듈화 시킨 과정을 이번 시리즈에서 같이 느껴볼 수 있길 바란다. 1️⃣ Toast Message란? 토스트 메시지(Toast Message)는 원래 안드로이드에만 존재하는 컴포넌트이다. 보통 앱 사용 중, 사용자와의 상호작용은 계속 열어둔 상황에서 동시에 짧은 메시지를 사용자에게 보여주기 위해 사용하는 컴포넌트다. 사용자의 인터랙션이 별도로 없어도 특정한 시간 뒤에 표출, 사라짐 동작이 자..
2024.02.16 -
1️⃣ 이번 글에서 구현하고자 하는 기능은? 이번 글에서는 URL 링크를 저장하고, 해당 링크를 앱 안에서 웹 페이지로 띄울 때 사용한 모든 기능들에 대해서 정리해보겠다. 이번 프로젝트에서 앱 내 웹 콘텐츠를 표출시키는 방식으로 WKWebView를 사용했다. WKWebView란 Apple의 기본 프레임워크 WebKit를 기반으로 동작하는 뷰이며, 네이티브 앱과 웹 콘텐츠 사이의 상호작용을 도와주는 다양한 기능을 지원하는 화면이다. 대표적으로, 웹 뷰의 내비게이션(뒤로 가기, 앞으로 가기) 동작이나 새로고침, 페이지의 타이틀, URL 같은 기본적인 정보들을 받아올 수 있으며, 심지어는 웹 페이지의 로딩 상태나 스크롤 위치 같은 디테일한 부분도 사용할 수 있다. 💡 앱 사용에 있어 외부 URL 연결 방식에 ..
[WebKit] WKWebView를 사용해서 앱 사용 중, 웹으로 연결시켜보자1️⃣ 이번 글에서 구현하고자 하는 기능은? 이번 글에서는 URL 링크를 저장하고, 해당 링크를 앱 안에서 웹 페이지로 띄울 때 사용한 모든 기능들에 대해서 정리해보겠다. 이번 프로젝트에서 앱 내 웹 콘텐츠를 표출시키는 방식으로 WKWebView를 사용했다. WKWebView란 Apple의 기본 프레임워크 WebKit를 기반으로 동작하는 뷰이며, 네이티브 앱과 웹 콘텐츠 사이의 상호작용을 도와주는 다양한 기능을 지원하는 화면이다. 대표적으로, 웹 뷰의 내비게이션(뒤로 가기, 앞으로 가기) 동작이나 새로고침, 페이지의 타이틀, URL 같은 기본적인 정보들을 받아올 수 있으며, 심지어는 웹 페이지의 로딩 상태나 스크롤 위치 같은 디테일한 부분도 사용할 수 있다. 💡 앱 사용에 있어 외부 URL 연결 방식에 ..
2024.02.15 -
오늘은 Swift에서 에러를 처리하는 방법, Error Handling에 대해 배워보도록 하겠다. 모든 프로그래밍 언어가 에러를 처리하는 방법을 가지고 있듯이, Swift도 마찬가지로 프로그램에서 발생한 에러 조건에 응답하고, 처리하는 프로세스를 갖고 있다. 공식문서 상에서는 이것을 "Swift는 런타임 에러를 던지고(throwing), 잡고(catching), 전파하고(propragating), 조작하는(manipulating) 방법을 모두 지원한다"라고 표현했다. 에러를 "던지고", "잡고", "전파"하고, "조작"한다는 말이 혹시 어렵지는 않은가...? (나만 그런가) 내가 공부를 했을 때, Swift 공식문서를 보고 공부하기에는 번역상으로 이해가 안 가는 말이 많아서 많은 어려움을 겪었는데, 이번..
[Swift] Swift는 에러를 어떻게 처리할까? (Error Handling)오늘은 Swift에서 에러를 처리하는 방법, Error Handling에 대해 배워보도록 하겠다. 모든 프로그래밍 언어가 에러를 처리하는 방법을 가지고 있듯이, Swift도 마찬가지로 프로그램에서 발생한 에러 조건에 응답하고, 처리하는 프로세스를 갖고 있다. 공식문서 상에서는 이것을 "Swift는 런타임 에러를 던지고(throwing), 잡고(catching), 전파하고(propragating), 조작하는(manipulating) 방법을 모두 지원한다"라고 표현했다. 에러를 "던지고", "잡고", "전파"하고, "조작"한다는 말이 혹시 어렵지는 않은가...? (나만 그런가) 내가 공부를 했을 때, Swift 공식문서를 보고 공부하기에는 번역상으로 이해가 안 가는 말이 많아서 많은 어려움을 겪었는데, 이번..
2024.02.13