전체 글

MVCMVC 패턴은 Model-View-Controller의 구조를 가지는 디자인 패턴으로, UIKit 프레임워크에서 자주 사용되는 디자인 패턴입니다. UIKit 프레임워크는 MVC 패턴을 기반으로 구성되어 있습니다.Model-View-Controller는 각자 다른 역할들을 가지고 있습니다.Model앱에서 사용되는 데이터와 비즈니스 로직을 담당합니다.UI와 독립적으로 이루어져 있으며, 데이터 저장 및 가공, 네트워크 요청 처리 등을 수행합니다.값이 변경되는 데이터를 Model이 가지고 있는 경우에는 Notification과 KVO 등을 통해 Controller에 변경 사항을 전달합니다.View사용자에게 화면을 표시하는 역할을 담당합니다.버튼, 레이블, 이미지 등의 **UI 요소들(UIView, UIBu..
· iOS/UIKit
여러 데이터를 표현하기 위해선 다양한 방법으로 구현할 수 있습니다. 그 중에서 반복적인 형식의 데이터를 표현하는 방법 또한 여러 가지인데, 대표적으로 UICollectionView, UIPageViewController, UIScrollView가 있습니다. 각 뷰가 어떻게 동작하는지와 메모리의 관점에서 어떠한 특징을 보이고 있는지 학습하였고, 이를 기반으로 상황에 따라 어떠한 뷰를 사용할 지 정의하고자 합니다. UICollectionView동작 방식UICollectionViewCell을 기반으로 데이터를 리스트 또는 그리드 형태로 표시합니다.재사용 큐를 사용하며, 보이지 않는 셀은 메모리에서 로드 또는 제거되지 않고, 재사용됩니다.메모리 관점셀을 재사용하기 때문에 효율적입니다. UIPageViewCont..
· Swift
클래스와 프로토콜의 차이Swift에서는 클래스 상속과 프로토콜 채택을 활용하여 코드의 재사용성을 높일 수 있습니다. 언뜻 보면 비슷해 보이지만, 각각의 역할과 사용 목적이 다릅니다. 어떤 상황에서 클래스를 사용하고, 언제 프로토콜을 사용하는 것이 더 적절한지 고민해보았습니다.  클래스의 상속클래스 상속은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 부모 클래스의 기능을 자식 클래스가 물려받아 사용할 수 있습니다.예를 들어, iOS 개발에서 UIViewController를 상속하면 기본적인 화면 관리 기능을 그대로 사용할 수 있습니다.class CustomViewController: UIViewController { override func viewDidLoad() { supe..
· iOS/UIKit
FinaliOS 개발을 하다보면 Final 키워드를 붙여 클래스를 정의하는 경우를 볼 수 있습니다.final class NetworkManager { static let shared = NetworkManager() private init() {} ... }따라서 Final 키워드의 특징은 무엇인지, 어떠한 경우에 사용해야 할 지에 대해 학습하였습니다. 문법적 특징Final 키워드를 선언하게 되면 상속이 불가능해집니다. 만약 Final 키워드가 선언된 것을 상속하려고 하면 컴파일 에러가 발생합니다.Final 키워드를 사용하면 메서드, 프로퍼티, 서브스크립트의 오버라이드가 불가능해진다는 특징을 지닙니다. 만약 final 키워드가 선언된 곳에서 오버라이드를 진행하려고 하면 컴파일 에러가 발생합..
· iOS
Xcode의 빌드 과정GCC를 통해 C언어를 빌드 하듯, Swift 언어는 Xcode를 통해 빌드가 됩니다. 따라서 이번에는 Xcode의 빌드 과정에 대해 학습해보았습니다. Swift는 C언어 기반이기 때문에 컴파일 과정이 매우 비슷합니다.  전처리기 (Preprocessing)전처리기는 소스 코드를 컴파일러가 읽을 수 있는 형식으로 전환해줍니다. Swift에는 전처리기가 없기 때문에 매크로 등을 정의할 수 없습니다. 하지만 전처리문을 부분적으로라도 사용할 수 있도록 [Build Settings] → ‘Active Compilation Coditions’를 제공해줍니다. Swift에서는 release와 debug를 구분하거나, OS를 구분할 때에 전처리문을 사용합니다.#if DEBUGprint("디버그"..
컴파일컴파일 과정이란 사람이 작성하는 High Level Programming Language로 구성된 소스 코드를 기계가 이해할 수 있는 Low Level Programming Language로 바꾸는 과정을 의미합니다. 그 중에서 컴파일러가 어떻게 동작하는지 간단하게 정리해보았습니다. 컴파일러 소스 코드가 기계어로 변환되기 위해선 Front End → Middle End(IR) → Back End의 변환을 거쳐야 합니다. Front EndFront End는 C나 Java 등의 언어의 문법을 해석하는 역할을 합니다. Front End는 다음과 같은 순서로 진행됩니다.Scanner가 소스 코드를 받습니다.Scanner는 소스 코드를 의미가 있는 단어로 쪼개어 단어들을 토큰으로 만드는 역할을 합니다.숫자,..
컴파일컴파일 과정이란 사람이 작성하는 High Level Programming Language로 구성된 소스 코드를 기계가 이해할 수 있는 Low Level Programming Language로 바꾸는 과정을 의미합니다. 흔히 우리가 프로그래밍을 하고 실행 코드를 실행하는데, 실행이 되기 위해선 컴퓨터는 해당 코드를 ‘컴파일’하게 되는 것입니다. 그 결과로 우리가 원하는 결과를 얻을 수 있는 것입니다. GCC를 통해 C언어가 컴파일되는 과정을 알아보겠습니다. 컴파일 4단계컴파일 과정은 전처리(Preprocessing) → 컴파일(Compiler) → 어셈블리(Assembly) → 링커(Linker) 순서로 이루어집니다. 전처리기(Preprocessor)전처리 과정은 소스 코드 파일(.c)을 .i 파일로..
학교에서 진행한 프로젝트에서 프론트엔드 개발과 배포를 맡아 진행하였고, 도커를 기반으로 온프레미스 환경에 서버를 배포하는 작업을 하였습니다.제가 해당 프로젝트를 진행하면서 직면했던 가장 큰 문제점은 DB Connection Refused 에러였습니다. 문제 상황개발이 다 완료된 후 개발 서버에 배포를 진행하였는데, DB와 백엔드의 연동이 되지 않아 발생한 문제였습니다. 기존에 다른 플랫폼이 설정한 레퍼런스를 기반으로 실행해보았지만, 백엔드와 DB가 연동이 되지 않았습니다. 해결 방법우선 다른 플랫폼의 배포 과정을 확인해보니, 다른 플랫폼 같은 경우에는 개발 서버에 DB 컨테이너가 이미 있다는 가정하에 백엔드 컨테이너를 실행하고 있었다는 점이 저희 플랫폼과 다른점이었습니다. 따라서 해당 레퍼런스를 기준으로..
Dev_Ted
프로그래밍 성장기