Kotlin, 코틀린은 매우 편리한 언어입니다. 예전에 비해서 많은 사람들이 사용하고 있고 특히 안드로이드 개발에 많이 사용되어집니다. 코틀린을 배우고 싶은 이유중에 하나는 최근에 스프링 부트를 개발하면서 코틀린으로 개발하는게 더 효율적인 것 같다는 생각과 어쩌면 앞으로는 자바 보다는 코틀린으로 개발하는 것이 더 트랜디한 방향으로 굳어질 것 같아서입니다. 또한 코틀린은 최근에 나온 대부분의 언어와 비슷하며 배우기도 쉽다고 생각됩니다. 오늘은 코틀린의 기본 문법에 대해서 알아보겠습니다. 패키지 정의 및 imports ▼ 패키지 정의와 imports 구문은 다음과 같이 소스 코드의 최상단에 기술합니다. 프로그램 시작점 ▼ 코틀린 애플리케이션의 시작점은 main 함수입니다. ▼ 배열 형태의 문자열을 인자로 받..
GitHub 토큰 로그인? 최근에 Github에 아이디 패스워드를 이용해서 로그인하려면 에러가 납니다. 이유를 찾아보니 최근에는 Access Token을 만들어서 토큰 인증 방식으로 로그인해야 한다고 합니다. Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead. Please see https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/ for more information. 저도 잘 모르고 있었는데 다음과 같은 제목의 만료 메일이 와서 로그인 토..
아이폰을 개발하다보면 스크롤 뷰를 많이 사용합니다. 제한된 영역에서 넓은 화면을 구현하기 위해서 입니다. 오토레이아웃을 사용할 경우 스크롤 뷰를 구현하기가 조금 까다롭습니다. Xcode가 버전업 되면서 현재는 ContentView와 FrameView에 오토레아이웃을 걸고 사용합니다. 하지만 SwiftUI 에서는 아주 쉽게 스크롤 뷰를 만들수 있습니다. 대신 조금 낮설긴합니다. GeometryReader를 이용해서 3개의 화면을 만들고 스크롤 뷰로 페이징하는 방법을 알아보겠습니다. 스크롤 뷰로 페이지 뷰 만들기 ▼ 아래 코드를 이용해서 페이징 처리가 가능합니다. colors 변수로 화면에 포함될 색상을 배열로 만듭니다. GeometryReader의 proxy 속성으로 각 화면의 화면 크기를 구합니다. .h..
MariaDB 관리 MariadDB 의 기초적인 사용자 관리와 간단한 SQL 구문을 이용해 데이터베이스 스키마와 테이블을 만들고 데이터를 삽입하는 법을 알아보겠습니다. ROOT 사용자 접속 MariadDB를 관리와 사용자를 만들고 제거하기 위해 root로 접근해야 합니다. 사용자 관리 루트 사용자로 접속하게되면 모든 설정을 수정하거나 사용자를 관리할 수 있지만 이는 보안적으로 결함이 되기도 합니다. 그래서 일반 사용자를 만들어 특정데이터에 접근을 사용자마다 제한을 두는 편이 좋습니다. 1) 사용자 생성과 권한 부여 (*는 전체를 나타냅니다.) sql > grant 권한종류 on 스키마이름.테이블이름 to 사용자이름@호스트 identified by '비밀번호'; 2) 사용자 삭제 sql > drop use..
package.json 파일에 실행 스크립트를 보면 다음과 같이 start, build, test, eject 4가지 명령이 있습니디. 일반적으로 start는 개발 모드 build는 배포용 빌드라고 알고 있습니다. 리액트(React) 에서 처음 공부할 때 중요하다고 생각되서 정리하는 차원에서 조금 더 자세히 차이점을 알아보고 실행하는 옵션들에 대해서 알아보겠습니다. (1) npm start 개발 모드로 프로그램을 실행하는 명령어 입니다. HMR(hot-module-replacement)가 동작해 수정과 동시에 화면이 변경됩니다. 개발 모드에서 코드에 에러거 있을 경우에는 브라우저에 메시지를 출력합니다. https 실행 옵션을 통해 https 인증서 없이 임시로 https 형태로 url을 만들 수 있습니다..
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 설정에 대해서 알아보겠습니다...