language/JAVA
-
Optional<T>language/JAVA 2020. 5. 7. 01:09
NullPointerException은 자바 개발자를 가장 많이 괴롭히는 예외 중 하나입니다. 컴파일 시에는 잠복해 있다가 런타임에 발생하는 NPE는 코드 곳곳에 묻혀있는 지뢰나 다름없습니다. 실제로 NULL 참조를 처음 고안한 영국의 컴퓨터 공학자 Tony Hoare 조차 NULL 참조를 만든 것은 10억불짜리 실수라고 이야기 했을 정도입니다. 이전까지 자바 개발자들은 NPE를 피하기 위해 다음과 같은 방어 코드를 만들어야 했습니다. public City getCity(InputInformation input) { if (input.getCity() == null) { return City.SEOUL; } return input.getCity(); } NPE를 방지하기 위해 분기문을 사용하게 되고 자연..
-
Stream, 스트림language/JAVA 2020. 5. 6. 03:28
자바8에 도입된 새로운 기능 중 스트림(Stream)이 있습니다. 스트림을 이용하면 선언형으로 기존의 컬렉션 데이터들을 처리할 수 있게 됩니다. 쉽게 생각하면 컬렉션 반복을 좀 더 효율적이고 간편하게 수행할 수 있는 방법이라고 볼 수 있습니다. 또한 데이터의 병렬 처리에도 용이한 장점이 있습니다. 위 그림은 Stream을 이해하기 쉽게 표현한 그림입니다. 그림에서 물고기들은 어부들이 설치한 그물에 걸러지고 일정한 규격으로 포장된 뒤 소비자에게 전달됩니다. 자바에서 스트림은 위 그림의 흐름이라고 할 수 있습니다. 이런 흐름속을 헤엄쳐 다니는 물고기와 해양 생물들은 컬렉션 데이터라고 할 수 있겠죠. 데이터들은 스트림을 유영하다가 어부가 설치한 그물에 걸러지게 됩니다. 코드에서는 filter로 표현 되는 부분..
-
람다 표현식(Lambda Expressions)language/JAVA 2020. 5. 3. 15:01
함수형 프로그래밍(Functional Programming)은 하나의 새로은 프로그래밍 패러다임입니다. 함수형 프로그래밍은 기본적으로 람다대수(lambda calculus)에 그 근간을 두고 있는 개념으로 다수의 함수형 프로그래밍 언어들은 람다 연산을 발전시킨 것으로 볼 수 있습니다. 지난 몇 년간 함수형 프로그래밍은 가장 인기있고 중요한 프로그래밍 패러다임이 되었고 객체지향 언어인 자바 역시 이런 함수형 언어의 장점을 도입하게 됩니다. 함수형 언어의 가장 큰 특징 중 하나는 함수가 1급객체(First class object)로 취급된다는 점입니다. 1급객체는 변수나 데이터 구조 안에 담길 수 있고 파라미터나 반환값으로 사용가능한 객체를 말합니다. 우리가 알고 있는 고전적인 자바에서 메소드는 1급 객체(..
-
레거시 코드를 테스트 하는 코드를 만들기language/JAVA 2020. 4. 2. 21:03
아래와 같은 레거시 코드가 있다고 생각해 보자. public boolean hasTray(List menus) { // 메뉴가 3개 이상이면 들고가기 쉽지 않기 때문에 쟁반이 필요하다. if (menus.size() > 2) { return true; } for (String menu : menus) { // 국물이 있거나 뜨거 요리는 들고가기 어렵기 때문에 쟁반이 필요하다. if (menu.equals("오뎅") || menu.equals("라면")) { return true; } // 세트 메뉴는 서빙되는 음식이 무조건 3개 이상이라 쟁반이 필요하다. if (menu.contains("세트")) { return true; } } return false; } 위 코드는 분식집에서 주문받은 음식을 서빙할..
-
데코레이터 패턴(Decorator Pattern)language/JAVA 2020. 2. 24. 23:22
30년 라면 외길 인생을 걸어온 대한민국 최고의 라면 장인 윌슨씨는 최근 생활의 달인에 라면 달인으로 소개되며 유명세를 떨치고 있었습니다. 그 덕분에 그의 라면 가게 역시 개점이래 최대의 호황을 맞고 있었지만 손님이 너무 많이 몰리는 탓에 알바생을 추가로 고용할 수 밖에 없었죠. 그러나 새로운 알바생들은 아직 윌슨씨 가게의 라면 가격을 제대로 외우지 못해 계속해서 계산 실수를 하고 있었습니다. 그도 그럴것이 국내 최고의 라면 장인 답게 윌슨씨는 라면에 여러가지 토핑을 추가해 다양한 맛의 라면을 만들고 있었고 그 토핑들의 가격이 각각 달랐기 때문에 처음 일을 시작하는 알바생들이 쉽게 계산할 수 없었기 때문이죠. 윌슨씨는 고민끝에 라면의 가격을 자동으로 계산해 주는 프로그램을 제작하기로 결심했고 그가 아는 ..
-
옵저버 패턴(Observer Pattern)language/JAVA 2020. 2. 12. 14:42
루이스는 최고의 개발자가 되기 위해 수련을 이어가던 중 통장 잔고가 바닥나는 불운을 겪게 되었습니다. 그는 생활비를 마련하기 위해 어쩔 수 없이 편의점 야간 알바를 시작하게 되었죠. 하지만 낮에는 개발 공부를 하고 밤에는 아르바이트를 하는 생활이 결코 쉽지는 않았습니다. 특히 잠이 부족한 것이 항상 문제였죠. 루이스는 지난 한 달 간의 아르바이트 경험으로 새벽 2시 정도가 지나면 손님이 거의 오지 않는다는 사실을 파악했습니다. 손님이 없는 동안에는 창고나 카운터 의자에 앉아 잠깐 눈을 붙일 수 있을 것입니다. 하지만 손님이 오면 얼른 나와서 업무를 시작해야겠죠. 만약 손님이 왔는데도 계속 잠을 자고 있다면 그는 알바를 잘리고 말것입니다. 루이스는 자신의 특기를 살려 손님이 문을 열고 들어오면 자신이 쪽잠..
-
전략 패턴(Strategy Pattern)language/JAVA 2020. 2. 11. 21:24
몇년 전, 어떤 나라의 교통국에서 자국의 교통망 시뮬레이션을 위한 프로그램을 만들었습니다. 물론 그들이 직접 만든 것은 아니고 IT강국인 한국의 한 SI업체에 외주를 맡긴 것이죠. 결과적으로 그들의 선택은 아주 훌륭한 것이었습니다. 수퍼 개발자가 넘쳐나는 대한민국의 SI업체인 만큼 기간내에 완벽한 시뮬레이션 프로그램을 만들어서 납품했기 때문이죠. 올해 봄, 이 회사의 신입 개발자로 채용되게 된 브래드는 얼마 전 부터 이 교통 시뮬레이션 프로젝트의 유지보수 업무를 맡고 있습니다. 뛰어난 선배들이 워낙 완벽하게 만들어 둔 프로젝트이기 때문에 브래드의 업무는 그저 기존의 코드를 보고 프로젝트 구조를 이해하는 정도에 불과합니다. 브래드는 이 시뮬레이션에서 핵심이 되는 Vehicle 객체의 구조를 다음 그림과 같..
-
String 문자열 객체간의 비교language/JAVA 2019. 12. 17. 17:41
String 은 웹개발을 할 때 가장 많이 사용하는 자료형입니다. 그러다보니 실무에서는 String 객체를 잘 알고 활용하는 것이 중요합니다. 그런데 생각보다 String 객체를 잘 못 사용해서 생기는 버그가 많습니다. 오늘은 간단하게 String 객체를 비교할 때 주의해야 할 점 세 가지를 알아 보도록 하겠습니다. String class 의 method 를 소개한 포스트가 있으니(링크) 참고하시면 좋을 것 같습니다. 1. '==' vs equals() String 자료형을 선언하는 방법은 크게 두 가지가 있습니다. 하나는 리터럴 문자열 값을 대입하는 것이고 하나는 new 키워드를 사용해 String 객체를 직접 생성하는 방법입니다. 그런데 두 값을 '==' 연산을 통해 비교하면 같은 문자열을 저장하고 ..