본문 바로가기

전체 글

아이템 2: 변수의 스코프를 최소화하라 상태를 정의할 때는 변수와 프로퍼티의 스코프를 최소화 하는것이 좋다. 프로퍼티 보다는 지역변수를 사용해라 최대한 좁은 스코프를 갖게 변수를 사용해라. 스코프를 좁게 만드는 가장 큰 이유는 프로그램을 추적하고 관리하기 쉽다. mutable 프로퍼티는 좁은 스코프에 걸쳐 있을 수록 변경 추적이 쉽다. 여러 프로퍼티를 한번에 설정 해야 하는 경우 구조 분해 선언을 사용해라 fun updateWeather(degrees: Int) { val (description, color) = when { degrees "cold" to Color.BLUE degrees "mild" to Color.YELLOW else -> "hot" to Color.RED } } 결론적으로 변수의 스코프가 넓으.. 더보기
아이템 1: 가변성을 제한하라 변경 가능한 상태를 적절히 관리하는게 어렵다. 프로그램 이해하기 어려움 코드의 실행을 추론하기 어렵다. 시점에 따라 값이 다르므로 어떤 값을 가진지 알아야 한다. 멀티스레드는 적절한 동기화가 필요하다. 변경이 일어나는 모든 부분에 충돌 가능 테스트 어렵다. 변경이 많으면 더 많은 조합을 테스트 해야 한다. 상태 변경시 다른 부분에 알려야 할 경우가 있다. → 정렬된 리스트에 요소 추가 코틀린에서의 가변성 제한 코틀린은 Immutable 객체를 만들거나, 프로퍼티를 변경 할 수 없게 막는게 쉽다. 읽기 전용 프로퍼티(val) 가변 컬렉션과 읽기 전용 컬렉션 구분하기 데이터 클래스의 copy 읽기 전용 프로퍼티 val val로 선언된 프로퍼티는 값(value)처럼 동작하며, 일반적으로 값이 변하지 않는다. .. 더보기
이펙티브 코틀린 1장 : 안정성 1부 좋은코드 1장 안정성 자바, 자바스크립트, C++ 대신 코틀린 활용 이유. → 코틀린의 안정성(safety) 오류가 덜 발생하는 코드 만들기 아이템 1: 가변성을 제한하라 아이템 2: 변수의 스코프를 최소화하라 더보기
Kotlin in Action - 2 코틀린 기초 코틀린은 타입 선언 생략이 가능하다. 코틀린은 변경 가능한 데이터 보다 불변 데이터 사용을 권장한다. 함수와 변수 Hello, world fun main (args: Array) { println("Hello, world!") } fun 키워드로 함수 선언 파라미터 이름 뒤에 타입 선언 함수를 최상위수준에 정의 가능. 클래스 불필요 System.out.println 대신에 println 세미콜론 불필요 함수 함수 선언은 fun 키워드로 시작한다. fun 다음에는 함수 이름이 온다. 함수 이름 뒤에는 괄호 안에 파라미터 목록이 온다. 위 그림은 코틀린 함수의 기본 구조를 보여준다. 코틀린 if 는 문장(statement)이 아니고 결과를 만드는 식(expression)이다. 문(statemen.. 더보기
Kotlin in Action - 1 코틀린 소개 자바 플랫폼에 들어가는 새로운 프로그래밍 언어 간결, 실용적, 자바와의 상호 운용성을 중시 대표적 서버 개발, 안드로이드 앱 개발 등의 분야에서 적용 가능 주요 특성 대상 플랫폼 : 서버, 안드로이드 등 자바가 실행되는 모든 곳 정적 타입 지정 언어 성능 : 실행 시점에 타입 판단 불필요 → 메소드 호출이 더 빠르다 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 오류로 중단될 가능성이 적어진다. 도구 지원 : 안전한 리팩토링, 도구는 더 정확한 코드 완성기능 제공 가능 함수형 프로그래밍과 객체지향 프로그래밍 간결성, 추상화, 코드중복 제거 함수형 스타일로 다룰 수 있는 API 제공 무료 오픈소스 철학 실용성 실제 문제를 해결하기 위해 만들어진 실용적 언어 연구를 위한 언어가 아닌,.. 더보기
M1 Mac에 Node.js v14 이하 설치하기(NVM) Node.js v15이상부터 애플 실리콘을 지원하기 때문에, v14 이하 버전을 사용하기 위해서는 로제타를 이용해서 설치해야 한다. Node.js를 사용할때는 버전 관리를 위해 NVM(Node Version Manager)을 주로사용한다. 이 글에서는 M1 Mac에 NVM을 이용해서 14이하버전 node설치를 한다. 1. 로제타 터미널을 실행한다. 아래 명령어 실행하거나 iTerm을 로제타로 사용해서 연다. arch -x86_64 zsh iTerm 로제타로 사용하여 열기(이전글 참고) 2. arch 명령어를 실행해서 로제타로 실행된걸 확인한다. 3. 아래 명령어를 사용해서 nvm을 설치한다. curl -o- | bash 4. 설치후 나오는 가이드에 따라 .zshrc에 환경변수를 추가 해준다. export.. 더보기
Rosetta iTerm 사용하기 M1 Mac에서 Intel Mac용 프로그램을 실행하기 위해서는 Rosetta에뮬레이터를 거쳐야 한다. iTerm을 Rosetta를 이용해서 실행하는 방법에 대해서 알아보자. 1. 응용 프로그램 폴더로 이동해서 iTerm을 복제해준다. 2. 복제한 iTerm의 정보가져오기로 들어간다. 3. Rosetta를 사용하여 열기를 체크한다. 4. 복제한 iTerm의 이름을 입맛에 맞게 변경한다. 5. RiTerm을 실행하고 arch 명령어를 실행해서 cpu type을 확인한다.i386이 나오면 성공! 더보기
스프링 트랜잭션 전파 속성(Transaction Propagation in Spring) Spring Framework의 트랜잭션 전파속성 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법을 결정하는 속성이다. 트랜잭션 경계의 시작지점에서 트랜잭션 전파 속성을 참조해서, 해당 범위의 트랜잭션을 어떤 식으로 진행 시킬 지 결정 할 수 있다. 스프링이 지원하는 트랜잭션 전파속성은 여섯가지가 있다. 모든 속성이 트랜잭션 매니저, 데이터 액세스 기술과 지원되지는 않으니 주의해야 한다. Required (default) Supports Mandatory Requires new Not supported Never Nested Required 기본 속성. 모든 트랜잭션 매니저가 지원한다. 미리 시작 된 트랜잭션이 있으면 참여하고, 없으면 새로 시작한다. 트랜잭션이 시작 된 후에 다른 트랜잭션 경계가 설.. 더보기