이번 포스팅에서는 우아한 프리코스를 진행하며 스스로 학습해 적용해보았던 일급컬렉션을 정리하고자 한다. 왜 사용하는가? 일급 컬렉션이 갖는 이점은 다음과 같이 정리할수 있겠다. 컬렉션의 불변성을 보장한다. 비즈니스에 종속적인 자료구조이다. 컬렉션에 이름을 붙여 직관적인 코딩이 가능하다. 먼저 컬렉션의 불변성을 보장한다는건, 일급컬렉션의 조건을 생각하면 금방 깨달을수 있다. 일급컬렉션은 상수를 제외한 멤버변수는 컬렉션하나만을 유일하게 갖고 생성자를 통해 주입받는 방식으로 만들어진다. 따라서 외부에서는 해당 컬렉션에 대해 접근이 불가하고 임의로 수정, 삭제등이 불가하므로 컬렉션에 대해 불변성을 보장해줄수 있는것이다. 비즈니스에 종속적인 자료구조라는 말이 조금 어렵게 느껴질수 있다. 좀 풀어서 설명하자면, JA..
Java에서는 상수를 선언하고 활용할때 다음과 같이 선언한다. private static final String HELLO = "안녕"; 그러나 여러 상수를 한번에 관리해주어야 하는 클래스가 생기기 마련이고, 또 상수가 많은 클래스는 가독성도 좋지 않고 또 상수 선언시마다 모든 키워드를 붙여주는 불편함, 그리고 변수명의 복잡해짐등 여러 문제점이 발생하게된다. 이때 사용하기 좋은것이 바로 JAVA에서 지원하는 Enum인 것이다. enum은 열거형 타입으로 상수들을 묶어서 관리하고자 할때 사용하기 용이하다. 이 열거타입 클래스는 상수들만 다루기에 정말 최적화 되어있고 기본적으로 제공해주는 메소드들을 활용해 상수를 처리하고 다루는 부분에 있어 편리함과 가독성 모두를 챙겨갈수 있는 이점이 있다. 그럼 먼저 기본..
정의 (depth - 0) 함수형 인터페이스는 단 하나의 추상메소드를 갖는 인터페이스를 말한다. 여러개의 디폴트 메소드와 상관없이 하나의 추상메소드를 갖는다면 함수형 인터페이스이다. JAVA 8 부터 지원되는 람다는 함수형 인터페이스의 활용으로만 사용이 가능하다. 즉 파라미터로 메소드를 넘기고 싶을때 함수형 인터페이스의 활용으로 충분히 가능하다. 이는 같은 구조를 갖는 여러매소드를 하나로 만들어 좀 더 객체 지향적인 설계가 가능하게끔 만들어준다. 종류 (depth - 1) 이런 함수형 인터페이스는 직접 만들어 사용해도 무방하지만, 사실 이미 JAVA에서 지원해주는 기본 함수형 인터페이스를 활용해도 어지간한 상황은 다 해결이 가능하다. 기본적으로 제공되는 함수형 인터페이스는 하단의 공식문서를 참조하도록 하..
왜 제네릭을 사용하는가? 컴파일시 강한 타입체크를 할 수 있다. 제네릭 타입 선언을 통해 실행 전 컴파일시 미리 타입을 강하게 체크해 에러를 사전에 방지할수 있다. 불필요한 형변환을 줄일수 있다. 제네릭을 사용한다면 실행전 타입을 강제할수 있어 실행중 형변환을 통해 원하는 타입으로 형변환하는것이 아닌 이미 원하는 타입의 자료형으로 실행시킬수 있다. 즉 특정 타입의 정해진 자료형을 형변환을 사용해 데이터를 다루는것이 아닌 사용자가 지정하는 타입으로 지정된 자료형으로 자유롭게 데이터를 다룰수 있다. 만약 내가 사용하려는 임의의 자료구조가 Integer 타입으로만 사용이 가능하게 설계가 되었다면, 해당 자료구조로 Double 형의 연산을 하고싶다면 그때 그때 형변환을 통해 사용해야 할것이다. 그러나 제네릭을 ..
프로그램에서 데이터를 처리해서 결과 만들어 내는 것을 연산이라 하는데, 이런 연산을 하기위해 사용되는 기호나 표기방법을 연산자라고 한다. 이런 연산자들끼리는 우선순위가 정해져 있으며 또 그 처리방식에 따라 같은 결과를 낼지라도 성능적으로 더 우수한 연산자가 있다. 먼저 연산자의 종류를 표로 한번 보겠다. 종류 연산 방향 연산자 우선 순위 단항 연산자 ++ -- ~ ! (type) 높음 낮음 산술 연산자 → * / % + - >>> 비교 연산자 = instanceof == != 논리 연산자 & ^ | && || 삼항 연산자 ? : 대입 연산자 ← = *= /= %= += -= = >>>= &= ^= |= 이제 각각의 연산자에 대해 정리해보겠다. 1. 증감연산자 ++ , -- 와 같이 생긴 이 연산자는 증감..