본문 바로가기

개린이 이야기61

Git Flow에 관하여 Git Flow Vincent Driessen이 2010년에 제안한 브랜치 관리 전략으로, 소프트웨어 개발에서 자주 사용되는 Git 브랜치 관리 모델 중 하나이다. Git Flow는 특정한 브랜치 구조와 머지 전략을 사용하여 프로젝트의 안정성과 유연성을 높이는데 초점을 둔다. Git Flow 구성 브랜치 1. Master 브랜치 Git 저장소에서 가장 중요한 브랜치 중 하나로, 프로덕션 환경에서 사용될 최종 코드를 담고 있는 브랜치다. 프로덕션 환경이란 실제 사용자들에게 서비스되는 환경을 의미한다. Master 브랜치의 특징 1) 안정성: Master 브랜치에 있는 코드는 항상 배포 가능한 상태여야 한다. 즉, 버그가 최소화되고, 기능이 완성되었으며, 성능이 검증된 코드만이 Master 브랜치에 병합되어.. 2023. 6. 26.
Git에 관하여 Git이란? Git은 분산 버전 관리 시스템 중 하나로, 소스 코드의 변경 사항을 효과적으로 추적하고, 관리할 수 있게 해주는 도구이다. Git은 프로젝트 내의 파일 변경 내역을 저장하고, 여러 사람들이 동시에 협업하면서도 코드의 일관성을 유지할 수 있도록 도와준다. 버전 관리 시스템이 필요한 이유 1. 변경 이력 추적 프로젝트의 파일들에 대한 변경 이력을 추적할 수 있다. 이를 통해 누가 언제 어떤 변경을 했는지 파악할 수 있다. 2. 코드 복구 만약 실수로 중요한 코드를 지웠거나, 특정 시점으로 코드를 되돌리고 싶을 때, 버전 관리 시스템을 통해 이전 상태로 쉽게 되돌릴 수 있다. 3. 협업 강화 여러 사람들이 동시에 같은 코드베이스에서 작업할 때, 서로의 작업을 병합하고 충돌을 해결하는 과정을 원활.. 2023. 6. 25.
Swift의 API Design Guidelines 소개 Swift API 디자인 가이드라인은 Swift를 이용하여 개발할 때, 어떻게 명료하고, 사용하기 쉬운 API를 작성할 수 있을지에 대한 지침을 제공한다. 가이드라인의 원칙에 대해서 알아보자! 기본 원칙 1. 사용지점에서의 명료함 Swift에서 가장 중요한 것은 사용지점에서의 명료함이다. 메서드나 프로퍼티와 같은 요소들은 한 번만 선언되지만, 여러 번 사용되기 때문이다. 따라서 이들이 명확하고 간결하게 사용될 수 있도록 API를 디자인해야 한다. 디자인을 평가할 때는, 항상 사용 사례를 살펴보고, 문맥 내에서 명확하게 보이는지 확인해야 한다. 2. 명료함은 간결함보다 중요 Swift 코드는 간결하면 좋지만, 명료한 코드를 작성하는 것보다 중요하지 않다. 3. 모든 선언에 대한 주석 작성 모든 선언에.. 2023. 6. 12.
Protocol과 associatedtype에 관하여 프로토콜과 제네릭 -제네릭은 유연하고 재사용 가능한 타입을 작성하는데 도움이 되는 범용 타입이다. 즉, 제네릭은 범용성을 위한 기능이다. 그럼 Protocol에서 범용성을 가지기 위해 제네릭을 사용하는건 어떨까요? protocol MyProtocol { //An associated type named 'T' must be declared in the protocol 'MyProtocol' or a protocol it inherits func performAction(with item: T) } 위 코드는 컴파일 오류를 발생시킨다. 이렇게 프로토콜에서 제네릭을 적용하는 것은 허용되지 않는다. 대신 프로토콜에서는 'associatedtype' 을 사용하여 제네릭과 같은 기능을 구현할 수 있다. associ.. 2023. 6. 6.
Protocol Composition에 관하여 Protocol Composition -Protocol Composition이란 타입이 여러 프로토콜을 묶어서 사용할 수 있는 기능이다. protocol CanFly { func fly() } protocol CanSwim { func swim() } struct Duck: CanFly, CanSwim { func fly() { print("오리 날다.") } func swim() { print("오리 수영하다") } } let duck = Duck() duck.fly() //"오리 날다." duck.swim() //"오리 수영하다" 위 코드에서 'Duck' 구조체는 'CanFly', 'CanSwim' 프로토콜 모두 준수한다. 따라서 각 프로토콜에 있는 기능들을 모두 사용할 수 있다. 메서드의 매개변수 .. 2023. 6. 6.
Protocol-Extension에 관하여 Protocol-Extension -프로토콜 확장은 프로토콜에 Extension을 사용하여 연산 프로퍼티나 메소드, 이니셜라이저 등을 추가할 수 있게한다. 그리고 이 프로토콜을 채택하는 타입은 요구사항을 구현하지 않고, 이 기능을 사용할 수 있다. protocol Run { func run() } struct Dog: Run { func run() { print("Run!!") } } struct Cat: Run { func run() { print("Run!!") } } struct Tiger: Run { func run() { print("Run!!") } } 위 코드를 보면 'Dog', 'Cat', 'Tiger' 모두 'Run' 프로토콜을 채택하고 있으며, 요구사항인 'run' 메서드를 모두 동일하.. 2023. 6. 5.