목록콤퓨타 왕기초 (187)
파게로그
URL이란, "네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약" 또는 "컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 리소스에 대한 참조"이다(위키백과). 다만 URL(Uniform Resource Locator)은 URI(Uniform Resource Identifier)의 부분집합으로서, 다음과 같은 차이를 지닌다. URI URL https://www.ddoongi.com/index.html O O https://www.ddoongi.com/index O X 위를 A, 아래를 B라 하자. B의 경우라도 파일명이 index라면 URL일 수 있으나, 이 경우는 제외한다. 리소스를 식별하는 기능을 갖추기만 하면 URI라고 할 수 있기에, A뿐만 아니라 B도 URI가 될 수 있다. 그러나 ..
정보처리기사와 SQLD가 다들 쓸모없다고는 하지만, 자신이 배운 것을 한 번쯤 정리하는 기회를 갖게 된다는 점, 그리고 언젠가 필요하게 될지도 모르지만 당장 필요하지 않아 접하지 못했던 '구멍'을 메울 수 있다는 점에서 (특히 비전공자에게) 응시 자체가 나쁜 경험이라고 생각되지는 않는다. 정보처리기사에 이어 SQLD에도 도전하게 되었다. 공부 과정은, 책과 실습이 주를 이루긴 했다. 다만 실질적으로 가장 도움이 된 것은, 이번 kry 온라인 저지 프로젝트를 하며 SQL을 만져본 경험이다. 학교에서 DB 수업을 들으면서... '고양이 급식 서비스'...를 위한 ERD를 만들어보면서... 완전 헤맸던 기억이 있는데, 이론적 기반과 실습 경험이 둘 다 조금씩이나마 갖추어지니 약간은 더 감이 잡히는 느낌이었다...
Docker란 무엇인가? "Docker란 무엇인가?"라는 질문에 답하기 위해서는, "Container란 무엇인가?"라는 질문에 대해서 먼저 답해보자. 아래는 도커 공식 홈페이지를 참고했다. 컨테이너란 "a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another"이다. 즉, 어플리케이션이 빠르면서도 환경에 영향을 받지 않아 높은 신뢰성을 가지고 작동할 수 있도록, 코드와 모든 의존성을 감싸는 소프트웨어의 표준 단위이다. Docker 컨테이너 이미지는 가볍고 독립적으로 작동하는 실..
package declaration 소스 파일은 패키지 선언으로 시작한다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 클래스나 함수와 같은, 소스 파일의 모든 내용들은 패키지에 포함된다. 따라서 위의 예시에서는, printMessage()의 풀네임은 org.example.printMessage인 것이며, Message의 풀네임은 org.example.Message인 것이다. Java였다면 위 프로그램은 실행이 불가능하다. 하지만 Kotlin에서는 패키지 지시 내용이 파일 위치와 일치하지 않는다는 경고가 뜨기는 하지만, 그럼에도 위 프로그램은 성공적으로 실행된다. 오히려, 어떤 .kt 파일이 패키지 ..
Kotlin에서 연산자를 사용하면 해당 연산자에 상응하는 멤버 함수가 호출된다. 예를 들어, a+b라는 표현은 내부적으로는 a.plus(b)로 변환되는 것이다. 사실, plus() 함수는 Kotlin의 여러 기본 자료형과 String에 맞추어 작동하도록 오버로딩되었다. // + operator for basic types operator fun plus(other: Byte): Int operator fun plus(other: Short): Int operator fun plus(other: Int): Int operator fun plus(other: Long): Long operator fun plus(other: Float): Float operator fun plus(other: Double):..
새로운 기능을 추가하여 클래스를 확장한다고 생각해보면, 새로운 클래스를 derive하거나, 특정한 디자인 패턴을 사용해야만 한다. 하지만 Kotlin에서는, 새로운 기능을 추가하여 클래스를 확장하기 위해서 extension function을 사용할 수 있다. 기본적으로 extension function이란, 클래스의 외부에 정의된, member function이다. 예를 들어, 어떤 문자열에 대해서 첫 번째와 마지막 문자가 제거된 새로운 문자열을 반환하는 메서드를 사용해야 하는 상황이라면, 이 메서드는 String 클래스에 미리 존재하는 메서드가 아니다. 이 때 해당 업무 수행을 위해 extension function을 사용할 수 있다. fun String.removeFirstLastChar(): Str..
Object Declarations Singleton은 객체지향 프로그래밍의 패턴 중 하나로서, 어떤 클래스가 하나의 인스턴스만을 가진다는 것이다. 예를 들어, SQL 데이터베이스 백엔드를 가지는 애플리케이션을 만들 때, 모든 고객에 대해 동일한 데이터베이스 연결을 재사용할 수 있도록 하기 위해 connection pool을 만들고 싶을 수 있다. 이를 위해서는 connection을 singleton class로 생성함으로써 모든 고객이 동일한 connection을 획득하도록 할 수 있다. Kotlin은 object declaration 기능을 통해 singletons을 쉽게 사용할 수 있는 방법을 제공한다. 이를 위해 object 키워드가 사용된다. object 선언은 properties, method..
sealed classes, sealed interfaces는 상속보다 강한 통제를 제공하는, 제한된 클래스 위계를 나타낸다. sealed class의 모든 subclass는 컴파일 타임에 알고 있게 된다. sealed class를 가진 모듈이 컴파일된 이후에는 어떤 subclass도 새로이 등장하지 않는다. 예를 들어, third-party clients는, 그들의 코드 속에 포함되었으나 내가 작성한 sealed class를 상속할 수 없다. 따라서, sealed class의 각 인스턴스는 어떤 제한된 집합 속의 유형 중 하나이며 이러한 유형들은 클래스가 컴파일될 때 모두 알려진다. sealed classes에 대한 설명은 sealed interfaces와 그 구현체에 대해서도 동일하게 동작한다. se..