전체 글
다트(Dart) 언어의 확장 메서드 (Extension methods) 정리
목적 다른 벤더에서 만든 라이브러리의 API를 직접 수정하지 않고 내가 원하는 메서드를 몇개 추가하고 싶을 때 사용 가능하다. 일반적인 언어에서 타인의 API 를 변경하는 것이 불가능한 경우가 많다. 원래는 헬퍼 함수나 래퍼 클래스를 이용해 해결하던 문제를 Extension methods 로 해결할 수 있는 것이다. 예시 1: 파싱 문자열에서 숫자로 변환하는 parseInt() 함수가 있었으면 할 때 확장이 포함된 라이브러리 임포트하기 라이브러리를 임포트하고 원래 있던 메서드인것처럼 사용하면 된다. import 'string_apis.dart'; // ··· print('42'.parseInt()); // Extension 메서드 사용. extension 키워드를 이용해 직접..
다트의 오류 처리 방식
오류 처리 (Error Handling) Java 와 달리 Dart 의 모든 예외는 Unchecked 예외임 자바 예외 처리의 종류 이펙티브 자바 item 70, 복구할 수 있는 상황에는 검사 예외를 프로그래밍 오류에는 런타임(비검사) 예외를 사용하라 메서드는 어떤 예외를 던질지 선언하지 않으며, 예외 처리가 강제되지 않는다. 다양한 Error 와 Exception 객체를 내부적으로 제공하고, 직접 정의할 수도 있다. Error 와 Exception 객체가 아니어도 어떤 객체든 예외로 던질 수 있다. 단, 프로덕션 코드에서는 Error 와 Exception 을 구현한 타입을 주로 예외로 던진다. throw throw FormatException('Expected at least 1 section&..
자바 예외의 종류와 특징
예외의 종류와 특징 예외 처리에서 가장 큰 이슈는 체크 예외(checked exception)라고 불리는 명시적인 처리가 필요한 예외를 사용하고 다루는 방법이다. Error java.lang.Error 클래스의 서브 클래스들이 있다. 시스템에 비정상적인 상황이 발생했을 경우 사용되며, 자바 VM에서 발생시키는 것이므로 애플리케이션 코드에서 잡으려고 하면 안된다. OutOfMemoryError나 ThreadDeath같은 에러는 catch 블록으로 잡아봤자 아무런 대응 방법이 없다. 시스템 레벨에서 이뤄지는 에러기 때문에 애플리케이션에서는 이런 에러에 대한 처리를 신경쓸 필요가 없다. Exception과 체크 예외 java.lang.Exception 클래스와 그 서브 클래스로 정의되는 예외들은 에러와 달리 ..
다트 (Dart) 변수, 상수 선언 방식
변수 선언 var var name = 'Jake Seo'; 타입 추론 (Type Inference): 변수에 들어가는 초기 값을 기준으로 변수의 타입이 추론되어 결정된다. 불변성 (Immutability): 컴파일 될 때, 추론된 타입으로 var 가 치환된다. 이 말은 var 로 선언한 변수의 타입이 일단 추론되면, 컴파일 시에 실제 타입으로 변경됐으니 더이상 타입을 변경할 수 없다는 것이다. dynamic dynamic name = 'Jake Seo'; name = 1 동적 선언: 변수의 타입이 고정되지 않아 계속 다른 타입의 값을 저장할 수 있다. 직접 타입 명시하기 String name = 'Jake Seo'; int age = 50; double weig..
코드 팩토리의 플러터 프로그래밍 - 다트 언어 마스터하기, 1장 다트 (Dart) 입문하기
코드 팩토리의 플러터 프로그래밍 1장, 다트 입문하기 "이 글은 골든래빗 《코드 팩토리의 플러터 프로그래밍》의 01장 써머리입니다." 다트 소개 히스토리 구글이 개발 2011년 10월 공개 크롬에 Dart Virtual Machine 을 도입해 JS 를 대체하려 했으나 실패함 특징 UI 제작에 최적화 Isolate 를 이용한 동시성 기능 제공 Null Safety Spread Operator Collection If 핫 리로드 완전한 비동기 언어 이벤트 기반 VM 기반이라 멀티 플랫폼에서 로깅, 디버깅, 실행 가능 AOT 컴파일이 가능해서 어떤 플랫폼에서든 빠름 자바스크립트로의 완전한 컴파일 지원 백엔드 프로그래밍 지원 다트의 컴파일 플랫폼 JS 로 완전 컴파일이 가능 증분 컴파일을 지원 개발 시 네이티..
증분 컴파일 (incremental compile) 이란?
증분 컴파일 (incremental compile) 이란? 프로그램의 수정된 부분만 다시 컴파일하는 기술이다. 일반 컴파일러는 소위 클린 빌드(clean build) 라는 것을 수행하는데 이는 모든 프로그램의 모듈을 재빌드하는 것을 말한다. 증분 컴파일러는 프로그램의 수정된 부분만 다시 컴파일한다.
JIT (Just-In-Time) 컴파일이란?
JIT 컴파일이란? JIT Compile 은 Just-In-Time compile (알맞은 때에 컴파일) 의 약자이다. 소스 코드를 미리 기계 코드로 변환하는 기존 컴파일러 (AOT) 와 달리 런타임에 네이티브 코드를 생성한다. 처음엔 바이트코드 형식으로 해석되거나 실행되지만 자주 실행되는 부분은 속도를 위해 동적으로 기계 코드로 컴파일된다. 자주 실행되는 부분을 저장소에 저장해놓는 것을 Optimization 이라고 표현한다. Optimization 된 부분이 다시 자주 사용하지 않게 되면 Deoptimization 을 다시 거친다. JIT 은 어떻게 탄생되었는가? 개념 자체는 새로운 것이 아니며, 1980년대에 Smalltalk 이 시초가 됐다. Smalltalk 의 설계자들이 해석된 언어를 보다 효..
AOT (Ahead-Of-Time) 컴파일이란?
정의 AOT Compile 은 Ahead-Of-Time compile (사전 컴파일) 의 약자이다. JIT(Just-In-Time) 컴파일과 주로 비교된다. 프로그램 실행 중 즉시 변환을 수행하는 JIT(Just-In-Time) 컴파일과 대조적이다. 고수준의 소스 코드를 네이티브 머신 코드로 미리 변환하는 프로세스를 의미한다. AOT 컴파일의 장점 시작 속도 기계어로 사전 컴파일 되어 있어 시작이 빠르다. 런타임 환경에서 바이트 코드를 네이티브 코드로 변경할 필요가 없다. 예측 가능한 성능 AOT 컴파일된 앱은 보다 일관되고 예측 가능한 런타임 성능을 제공한다. JIT 컴파일은 런타임 중에 발생하는 컴파일 단계로 인해 가변 오버헤드가 발생할 수 있기 때문이다. 코드 난독화 바이트 코드보다 리버스 엔지니어..
쉘스크립트의 셔뱅(Shebang) 이란?
셔뱅 (Shebang) 이란? 스크립트 시작 부분의 #! 문자열을 말한다. Shebang, Hashbang, Pound-bang 이라고 불리기도 한다. 셔뱅의 목적 스크립트의 시작을 알리는 역할을 한다. 스크립트를 사용할 인터프리터를 지정하는 운영체제에 대한 명령어 역할을 한다. 인터프리터를 명시적으로 호출하지 않고도 스크립트를 독립적 실행파일로 실행할 수 있다. 기본 문법 #!/path/to/interpreter 다양한 종류의 Script 의 Shebang Bash script #!/bin/bash Python script #!/usr/bin/python3 Perl script #!/usr/bin/perl 제한 사항 셔뱅은 첫째 줄이어야 한다. 앞에 주석이나 공백을 넣는 것은 허용되지 않는다. 유닉스 ..
CSS transition 속성이란? (feat. 애니메이션 부여)
CSS transition 속성이란? 아래 4개의 속성을 한번에 정의할 수 있는 약식 표기(shorthand property) 속성이다. transition-property: transition 이 적용될 CSS 속성을 정의 transition-duration: transition 애니메이션이 얼마만큼의 시간을 거쳐 일어날지에 대한 속성을 정의 transition-timing-function: transition 애니메이션이 어떠한 형태로 일어날지에 대한 속성을 정의 transition-delay: 얼마만큼 기다렸다 transition 애니메이션이 일어날지 정의 예제 /* 필요한 만큼 속성을 이용하면 된다. */ /* property name | duration */ transition: margin-r..
백엔드 개발자가 새로운 앱을 개발한다면 어디부터 개발해야 할까?
백엔드 어디부터 개발할까? "백엔드로 새로운 프로젝트를 시작하면 어디부터 개발해야 할까?" 에 대한 고민으로 이 글을 써본다. 나는 보통 스프링 부트 환경에서 개발하기 때문에 그 기준이다. 1. 분석 및 설계 단계 (Analysis and Design Phase) 요구사항을 이해한다. 아키텍처를 정의하고 중요한 기술적 결정을 한다. 프로젝트 구조, DB 선택, 엔티티 정의, 비즈니스 도메인 이해 등이 이 단계에 포함된다. 2. 도메인 모델 (엔티티) 과 함께 시작한다. 엔티티를 코딩하며 시작한다. 엔티티는 비즈니스 로직의 핵심을 담당하게 되며, 시스템 내의 실제 개체와 관계를 나타낸다. 애플리케이션을 위한 강력한 기반을 구축한다. 3. 리포지토리 레이어 엔티티 정의 후에는 DB 와 상호작용하는데 필요한 ..
@Embedded 와 @Embeddable 과 @AttributeOverrides 란?
@Embeddable 애노테이션이란? 필드 혹은 속성을 임베드 가능한 클래스로 지정하는데 사용한다. 임베드 가능한 클래스란, 고유한 기본 키가 없는 관련 필드 그룹을 나타내는데 사용된다. 일반적으로 엔티티 내에서 관련 열을 함께 그룹화하는데 사용된다. 몇몇 필드를 분리된 클래스로 캡슐화하는데 이용된다. 엔티티와 함께 컬럼으로 직접 매핑된다. 아래는 주소 정보를 임베드 가능한 클래스로 구성한 예이다. @Embeddable public class Address { private String street; private String city; private String state; private String zipCode; // getters, setters, etc. } @Embeddable 애노테이션 클래..