Objective-C로 아이폰 앱을 만들 때는 #pragma mark - 주석 내용을 포함해서 주석을 나타내던 것이 Swift로 넘어오면서 MARK로 변경되었습니다. 기존의 #pragma라는 부분을 더 이상 쓰지 않아도 됩니다. 또한 TODO, FIXME와 같은 구문도 추가할 수 있습니다. 다른 언어 C++, C에서는 보통 전처리 구문으로 인식하는 #pragma는 define이나 include와 같이 사용됩니다. 하지만 Xcode에서는 이를 전처리 구문으로 쓰기보다는 메서드의 구역을 나눌 때 보통 사용합니다. 스위프트 같은 경우에는 extension이라는 문법이 추가돼서 메서드의 구분을 줄 때 extension을 사용하기도 합니다. 영역 구분관련 주석의 종류 // MARK : 설명 // TODO : 할 ..
컴퓨터 프로그래밍에 제네릭이라는 용어가 있습니다. 제네릭 타입은 클래스나 인터페이스 또는 메서드를 정의할 때 타입을 파라미터로 사용합니다. 즉 가변 타입 클래스, 인터페이스, 메서드라고 생각하면 조금 알기 쉽습니다. 제네릭은 다음과 같은 두 가지 장점이 있습니다. 또한 다음의 장점은 코드의 재사용성을 높혀줍니다. 컴파일시 강한 타입 체크를 할 수 있다. (Stronger type checks at compile time) 형변환 코드를 없앤다. (Elimination of casts) ArrayList ▼ 간단한 예로 Java에서 자주 쓰는 ArrayList로 예를 들겠습니다. 다음과 같은 코드를 사용할 때 객체 생성시 타입이 String으로 정해지고 우리는 이 값을 사용하기 위해서 형변환을 하지 않습니..
하버드 대학교 강의 중에 CS50이라는 온라인 강의가 있습니다. 비전공자를 위한 강의로 컴퓨터의 다양한 기초지식을 배울 수 있게 해 줍니다. 영어공부도 하고 잘 모르는 기초지식을 쉽게 알 수 있어서 정말 좋습니다. 한 강의당 약 2시간 정도 되는데 다음과 같은 것들을 배울 수 있습니다. 컴퓨터에 대해서 잘 알고 있다고 해도 분명 도움되는 부분이 많을 겁니다. 오늘 소개해드릴 CS50 IDE는 이 강의를 위해 만들어진 툴 같습니다. 처음에는 이런 유사한 툴들이 많아서 크게 신경 쓰지 않았는데 리눅스 터미널 환경도 제공하고 있어 간단한 프로그래밍 연습에 좋을 것 같습니다. CS 50 커리큘럼 Week 0 - Scratch (스크래치) Week 1 - C (C 언어) Week 2 - Array (배열) Wee..
컴퓨터 프로그래밍에는 프로세스라는 개념이 있습니다. 프로세스란 실행환경이라고 생각하면 됩니다. 컴퓨터에는 메모리와 CPU가 있고 특정 프로그램이 할당한 메모리 공간과 그 외 자원들을 포함한 실행 환경을 프로세스라고 합니다. 이는 분명히 프로그램이나 애플리케이션과는 조금 다른 개념입니다. 한 개의 프로그램 또는 애플리케이션에 여러 개의 프로세스가 포함될 수 있기 때문입니다. 위에서 설명한 프로세스와 비슷한 하위 개념인 스레드가 있습니다. 스레드는 다른말로 lightweight process (경량 프로세스)라고도 합니다. 이유는 프로세스를 만드는 비용에 비해 스레드를 만드는 비용이 적게 들어가기 때문입니다. 스레드들은 어떠한 프로세스에 종속되며 프로세스에 할당된 메모리 또는 파일과 같은 자원을 스레드들끼리..
예외처리(Exception)란? 처음 프로그래밍을 하게 되면 그냥 동작하는 것에 중점을 두기 때문에 예외처리는 무시하고 넘어가기 쉽습니다. 예외는 에러(Error)의 범주에 포함됩니다. 에러는 예외를 포함에 시스템의 이상, 하드웨어의 문제등을 포괄적으로 나타내는 개념입니다. 가장 대표적으로 OutOfMemoryError를 말할 수 있습니다. 말 그대로 메모리가 부족해서 시스템이 중단 되는 상황이죠. 예외처리란 예외가 발생할 것을 개발자가 미리 예측해서 이를 제어하고 비정상 종료를 피하기 위한 처리 방법입니다. 자바를 포함한 대부분의 언어들은 이러한 예외상황을 처리하고자 Try Catch 문을 사용해서 처리합니다. 다음과 같이 두 문장으로 정리를 할 수 있습니다. 메서드 내에서 오류가 발생했을때 시스템에 ..
인텔리제이 아이디어(IntelliJ IDEA, 이하 인텔리제이)는 다양한 개발 환경을 가지고 있는 IDE 입니다. 예전에는 마이크로 소프트의 Visual Studio를 최고의 IDE(통합개발환경)라고 생각했었는데, 지금은 생각이 바뀌었습니다. 특히 안드로이드 개발이 가능한 인텔리제이의 경우 매우 유용한 기능들이 포함되어 있어요. 인텔리제이의 비교 대상인 이클립스는 무료이고 오픈소스이며 다양한 개발 환경을 지원하긴 하지만 사실상 거의 JAVA 위주의 개발툴이라고 해도 무방할 것 같습니다. 인텔리제이의 경우 이클립스에 비해 대부분의 기능이 우월하지만 너무 비싸다는 것과 생산성을 높여주는 기능들이 많긴 하지만 너무 다양한 기능이 있어 복잡하게 느낄 수도 있습니다. 이 글에서는 인텔리제이를 사용하기 위해서 정말..
Xcode로 화면을 작업하는 일은 많은 노하우가 필요합니다. 다른 UI 툴에 비해서 기능도 많고 사용 방법도 굉장히 자유도가 높습니다. 제가 지금까지 몰랐던 기능이 있어서 소개해드립니다. 오토레이아웃을 사용하거나 SwiftUI를 사용하게 되면 라이브러리 기능을 많이 사용하게 되는데요. 단축키는 다음과 같습니다. Command + Shift + L ▼ 아니면 다음과 같이 디자인 화면 우측 상단에 + 버튼을 눌러도 라이브러리 창이 뜹니다. 그런데 문제는 이 창이 한 번 사용하고 마우스 포커스를 잃으면 창이 사라지는 단점이 있죠. 물론 바로 사라져서 다음 작업을 이어서 하기 때문에 편리한 점도 있습니다. 그런데 만약 다음과 같이 Option 키를 추가해서 단축키를 사용한다면 창이 분리되는 것을 확인하실 수 있..
컴퓨터 소프트웨어 개발에 있어서 Git으로 형상관리 및 버전관리를 하는 것이 거의 일반화되어 있습니다. 개발자라면 필수적으로 알아야 하는 툴을 꼽자면 저는 그중에 형상관리 툴인 Git이 생각납니다. 요즘은 GUI 툴도 있고 깃허브(Github)사 에서 나온 Github 데크스톱이 너무 훌륭해서 CUI 환경을 잘 몰라도 되지만 우리가 실수를 한 경우에는 조금 중요해집니다. 오늘은 깃(Git)에서 사용하는 3가지 상태와 커밋(Commit)을 취소하는 방법에 대해서 알아보겠습니다. Git의 3가지 상태 Git은 총 3가지의 상태를 가지고 있습니다. 그리고 다음과 같이 각 상태별로 지칭하는 영역이 달라집니다. 예를 들면 Staged 상태는 Staging area의 영역에 포함된 것이죠. Modifed Stage..
지난 시간에는 네비게이션 컨트롤러를 만들기 위해서 설정을 하고 디자인을 해봤습니다. 오늘은 코드를 작성해서 네비게이션 그래프를 잘 동작하도록 만들어보겠습니다. 안드로이드는 오랫동안 이어져온 v4, v7, v8, v17과 같은 서포트 라이브러리를 통해서 하위 호환을 지원했었는데 이런 오래된 구조를 재 정립하고자 Android extension library (Androidx) 기반의 패키지 구조를 만들게 되었으며 이것들은 모두 젯팩의 구성요소입니다. 다시 말해 서포트 라이브러리와 코틀린 지원 도구 및 여러 라이브러리가 포함된 통합 지원 라이브러리라고 할 수 있습니다. 젯팩 컴포넌트 구성 Architecture - 뷰를 포함한 UI 구성요소의 라이프 사이클 관리 및 LiveData와 뷰 모델, Room 데이..
저번 강좌에서 안드로이드 Jetpack 네비게이션 컨트롤러를 만들고 환경을 구성했었는데요. 이어 이번 시간에는 네비게이션 컨트롤러를 만들기 위한 디자인 작업을 해보도록 하겠습니다. 다음과 같은 구성으로 디자인이 됩니다. 사실 디자인이라고 보기는 어렵고 그냥 화면 구성이죠. 3개의 프레그먼트(Fragment)를 만들고 첫 번째 페이지는 메인 프레그먼트로 다음 페이지로 이동하는 기능만 있습니다. 두 번째 페이지는 다음 페이지로 이동하거나 뒤로 이동하는 기능이 있습니다. 다음 페이지로 이동할 때는 번들을 통해서 특정 값을 전달하는 내용도 포함됩니다. 세 번째 페이지는 다시 메인 프레그먼트 페이지로 이동하는 기능만 있으며 두 번째 페이지에서 전달받은 값으로 버튼의 텍스트를 변경합니다. 프레그먼트 생성 ▼ 새로운..
Google I/O 2018에서 발표한 안드로이드 Jecpack의 내비게이션 컨트롤러를 사용하는 방법을 알아보겠습니다. iOS 개발의 네비게이션 컨트롤러와 비슷하며 프래그먼트를 사용해서 오히려 iOS 보다 더욱 편리하게 이동이 가능해보입니다. iOS의 경우 특정 뷰 컨트롤러에 네비게이션 컨트롤러를 만들고 RootViewController로 설정해줘야 해서 객체가 하나 늘어나는 반면 안드로이드의 Jetpack 네비게이션의 경우 아주 간단히 프레그먼트들을 연결해서 사용할 수 있습니다. Navigation Components는 Jetpack의 Architecture에 속하는 라이브러리 중 하나이며, 오늘은 간단히 여러 프레그먼트의 네비게이션을 연결하고 이동하기 위한 Jetpack 설정에 대해서 알아보겠습니다...