본문 바로가기

전체 글

(404)
[Atomic 23] 예외 (feat. 예외의 기초) I take exception to that(나는 그에 대해 반대한다)의 exception인 예외 상황 예외 발생은 코드가 실행되면서 문제가 발생할 경우 현재 함수나 현재 영역의 진행을 막게 되는데, 우리는 이에 대한 처리와 조치를 취할 수 있어야 한다. 오늘은 이러한 처리와 조치를 알기 전 예외란 무엇인지 알아보고자 한다. [ 예외 상황 ] Exception : 예외가 던져지면(throw 예외명(예외 처리)) 실행 경로가 중단되고, 예외 객체는 현재 문맥을 벗어남 : 프로그래머스가 실수한 코드를 수정해야 한다는 예외에 대한 정보를 표시 : 예외를 잡아내지 않을 경우, 프로그램이 중단되며 스택 트레이스가 출력 : 문제를 처리하기에 충분한 정보가 맥락에 존재하는 일반적인 문제와 구분해야 함 * 스택 트레이..
[Atomic 22] 테스트 프로그램을 빠르게 개발하기 위한 필수 '지속적인 테스트' 우리는 코드를 짰을 때 이 코드를 내가 의도한 대로 잘 짰는지, 내부적으로 실행되었을 때 잘못된 곳은 없는지 확인하는 과정이 필요하다. 우리는 이를 위해 println을 사용하여 올바름을 검증하는 것은 부실한 접근 방법이기에 테스트를 배운다. [ 테스트 ] 테스트 - JUnit : 자바에서 널리 쓰이는 테스트 프레임워크로 코틀린에서도 유용하게 사용 - 코테스트 : 코틀린 전용으로 설계되어 코틀린 언어의 여러 기능을 살려 작성 - 스펙 프레임워크 : 명세 테스트라는 다른 형태의 테스트 제공 * 아래에서 사용하는 테스트의 경우 Atomic Kotlin 책에서 제공하는 테스트 프레임워크로 아래와 같은 특징을 가지고 있음을 참고 - 식의 예상 결과값을 보..
[Atomic 21] 패키지 프로그래밍에서의 근본적인 원칙 Dry(Don't Repeat Yourself)를 지키기 위한 패키지 프로그램을 짜다보면 자주 이용하는 코드가 생기는데 우리는 동일한 코드를 동일하게 작성하는 것이 아닌 클래스, 함수로 만들어 반복적으로 사용할 수 있도록 코드를 작성한다. 이렇게 하나로 만들어두면 반복적으로 작성함으로서 발생하는 코드를 줄이고 이로 이해 발생할 수 있는 오타로부터의 오류를 해결할 수 있는데, 코들린에서 패키지로 이를 만들어서 관리할 수 있다. [ import ] 패키지를 배우기 이전 우리는 import 키워드를 사용하여 다른 파일에서 정의되는 코드를 재사용 할 수 있었는데, 코틀린에서 import를 사용하는 방식은 아래와 같다. import packagename.ClassName import..
[Atomic 20] 가시성 제한하기 (feat. 접근 변경자) 변화해야 하는 요소와 동일하게 유지해야 하는 요소를 분리해 가시성을 제어하자 코틀린에서 가시성을 제어하기 위해 어떤 것을 제공하는지 알아보는 아톰이다. [ 접근 변경자 ] - 가시성 제어를 위해 코틀린에서 제공 - public, private, protected, internal 등의 변경자가 존재하며, 해당 변경자를 통해 접근 여부 결정이 가능 - 접근 변경자는 클래스, 함수, 프로퍼티 정의 앞에 위치 [ public / private] public - 클라이언트 프로그래머 접근 가능 - 클라이언트 코드에 직접적으로 영향을 미침 - 변경자가 지정되어 있지 않은 경우의 디폴트 값으로 public 변경자는 기술적으로 불필요한 중복 private - 숨겨져 있으며, 같은 클래스에 속한 다른 멤버만 접근 가능..
[Atomic 19] 생성자 생성자에 정보를 전달해 초기화 할 수 있다? 이전 블로깅에서 클래스를 생성하면서 해당 클래스에 대한 객체를 생성했었는데, 이 또한 생성자이다. 해당 클래스에 대한 내용으로 새롭게 객체를 생성했었는데 오늘의 아톰은 이에 대한 내용을 다룰 예정이다. [ 생성자 ] 객체들은 서로 독립된 세계로 개별 객체를 초기화 할 수 있다면 초기화 문제 중 상당수를 해결할 수 있는데, 코틀린에서 객체를 제대로 초기화 할 수 있는 메커니즘인 생성자에 대해 알아볼 예정이다. 1) 생성자 생성 class Bus fun main(){ val bus1 = Bus() } - 생성자는 새 객체를 초기화하는 특별한 멤버 함수와 비슷 - 다른 객체지향언어와 달리 new 키워드가 없어도 되며, 코틀린에서 new는 불필요한 중복임 2) 파라미..
[Atomic 18] 프로퍼티 (val & var) 클래스에 속한 프로퍼티 [ 프로퍼티 ] - 클래스에 속한 val나 var을 의미 - 클래스에 속한 프로퍼티는 클래스의 일부분으로, 점 표기법(객체명.프로퍼티 명)을 사용해 프로퍼티 값에 접근 가능 - 멤버 함수의 경우 같은 클래스에 속한 프로퍼티에는 점 표기법을 사용하지 않고 접근 가능 - 프로퍼티를 통해 클래스 내에서 상태를 유지 - 각 객체는 프로퍼티를 저장한 공간을 따로 할당 [ 코드 예시 ] class Cup{ var percentFull=0 val max = 100 fun add(increase:Int):Int{ percentFull += increase // 멤버 함수에서 동일한 클래스 내의 프로퍼티에 접근 가능 if(percentFull > max) percentFull = max retur..
[Atomic 17] 클래스 만들기 내가 원하는 객체의 타입을 정의해 클래스를 만들 수 있다? 이전 블로깅에서 클래스와 멤버, 객체 등에 대해 이야기 하면서 코틀린에서 제공하는 IntRange, String을 사용한 함수들에 대해서 간단하게 알아보았는데, 오늘은 이에 대한 본격적인 내용에 대한 학습을 시작하게 될 것 같다. 오늘은 클래스에 대해서 자세히 알아볼 예정이다. [ 클래스 ] * 이전 블로깅 참고 클래스(class) : 새로운 데이터 타입의 기초가 되는 프로퍼티와 함수를 정의 : 사용자 정의 타입 : 상태와 행동을 정의 이전 블로그에서는 클래스에 대한 이론적인 부분에 대해서 설명했다면, 이번에는 클래스를 생성하고 사용하는 방법에 대해 학습할 예정이다. 클래스 정의 : class 키워드 다음 클래스 이름 식별자 작성 : 클래스 이름..
[Atomic 16] 객체는 모든 곳에 존재한다 (feat. 클래스/멤버 기본) 코틀린에서의 객체는 모든 곳에 존재한다? 객체는 프로퍼티(val && var)를 사용해 데이터를 저장하고, 함수를 사용해 이러한 데이터에 대한 연산을 수행한다. 지금까지의 코틀린 블로깅을 진행하면서 자연스럽게 사용했던 모든 것들을 더 깊고 자세하게 배울 수 있는 아톰이 아닐까 싶다. 지금까지는 당연하게 사용했다면, 오늘 학습을 통해서 내가 사용하는 것들이 무엇을 의미하는지 알아볼 수 있는 시간을 가지고자 한다. [ 용어 정리 ] 1) 클래스(class) : 새로운 데이터 타입의 기초가 되는 프로퍼티와 함수를 정의 : 사용자 정의 타입 : 상태와 행동을 정의 2) 멤버(member) : 클래스에 속한 프로퍼티나 함수 3) 멤버 함수(member function) : 함수 안에 정의 : 특정 클래스에 속한 ..