본문 바로가기

분류 전체보기36

[정리] 모던 자바 인 액션 - 스트림 소개 스트림은 자바 8 API에 새로 추가된 기능으로, 스트림을 사용하면 선언형(구현코드 대신 질의의 형태)로 컬렉션 데이터를 처리할 수 있다. 선언형의 예로 데이터베이스 질의를 들 수 있는데, SELECT name FROM disches WHERE calorie < 400 ORDER BY calorie는 칼로리가 400 미만인 요리명을 출력하라는 SQL질의이며 결과를 얻기 위해 질의할 뿐 구체적인 구현 코드를 전달하진 않는다. 만약 자바 7 코드로 위 예제를 구현하려 했다면 아래와 같았을 것이다. // 400 칼로리보다 아래인 dish들만 수집 List lowCaloricDishes = new ArrayList(); for(Dish dish: menu) { if(dish.getCalories < 400){ .. 2023. 1. 6.
[SQL] 엑셀로 배우는 SQL - NULL이란, IS NULL, IS NOT NULL 엑셀 필터를 사용하시면서 '필드값 없음'이라는 문장을 보신 적이 있으실 거에요 '필드값 없음'은 칸에 아예 값이 없는 상태를 말하죠? 엑셀에선 띄어쓰기 없는 공백 '' 을 '필드값 없음'이라고 보기도 하죠 하지만, DB에선 조금 다릅니다. 공백 마저도 없는, 값이 지정되지 않은 상태를 나타내는 개념이 따로 있죠. 바로 NULL 입니다. NULL은 SQL에서 = 나 != 로는 다룰 수 없는 개념인데요 NULL이란 무엇이며, 어떻게 다뤄야 하는지 알아보겠습니다. NULL 이란 위에서도 말했듯 NULL은 값이 지정되지 않은 상태를 의미합니다 정확히는 NULL도 값 중에 하나이니 아직 지정되지 않은 값 이라고 하는게 정확하겠네요. NULL 값은 빈 문자(''), 공백(' '), 0과는 전혀 다른 특별한 값입니다.. 2023. 1. 6.
[정리] 모던 자바 인 액션 - 람다 표현식 (Lambda Expression)(2) 람다 표현식이 함수형 인터페이스의 인스턴스로 동작할 수 있다고 하였는데, 실제 람다 표현식에는 이 람다가 어떤 함수형 인터페이스를 구현하고 있는지에 대한 정보가 나와있지 않다. 람다의 형식 검사, 형식 추론, 제약 람다가 어떤 함수형 인터페이스를 구현하고 있는지 직접적으로 나와 있진 않지만, 람다의 문법을 보고 람다의 형식을 추론할 수는 있다. 람다가 전달될 메서드의 파라미터, 람다가 할당되는 변수 등에서 람다 표현식의 형식을 추론해볼 수 있는데 이를 대상형식이라 한다. List heavierThan150g = filter(inventory, (Apple apple) -> apple.getWeight() > 150); 1. filter 메서드를 확인한다. 2. filter 메서드는 두 번째 파라미터로 P.. 2023. 1. 5.
[SQL] 엑셀로 배우는 SQL - 집계함수 (MIN, MAX, AVG, SUM, COUNT) 엑셀에서 표를 다루다 보면, 필터 외에 함수를 사용해서 아래와 같은 결과들을 내야 하는 경우가 종종 있습니다. - 최소, 최대, 평균, 합계, 개수 위 값들을 추출하기 위해서 보통 엑셀 함수를 사용하는데요 MIN, MAX, AVERAGE, SUM, COUNT 함수로 위 값들을 표현할 수 있습니다. SQL에서도 SELECT절에서 집계함수를 이용해 동일한 결과를 낼 수 있는데요. 함께 살펴보겠습니다. 집계 함수 집계 함수란, 지정된 범위 내에서 전체 행을 두고 계산을 할 때 사용되는 함수를 말합니다. 주로 쓰이는 집계 함수는 아래 다섯 가지입니다. 일반적으로 그룹함수 등을 통해 별도 범위가 지정되지 않은 이상 '범위'란 전체 행을 의미하게 됩니다. 그리고 위 집계함수는 조회할 column들을 명시해두는 영역.. 2023. 1. 5.
[정리] 모던 자바 인 액션 - 람다 표현식 (Lambda Expression)(1) 익명 클래스로 동작을 구현할 수 있었지만, 기대한만큼 깔끔한 코드가 나오진 못했다. 조금 더 깔끔하고 단순한 코드로 동작을 구현할 수 있는 자바 8의 새로운 기능 람다 표현식을 설명한다. 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라 말할 수 있다. 람다를 사용함으로써 얻는 가장 큰 이득 중 하나는 익명 클래스 등에 형식상 들어가야만 했던 코드들을 더 이상 사용하지 않아도 된다는 점이다. // lambda 적용 전 Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()) ; } }; // lambda 적용 후 .. 2023. 1. 4.
[SQL] 엑셀로 배우는 SQL - WHERE (AND, OR, NOT) 앞서 다룬 연산자들로 데이터를 조회할 수 있게 되었습니다. 그런데, 만약 조건들을 하나가 아닌 여러 개 적용시켜야 할 경우엔 어떻게 처리할까요? 엑셀에서는 여러 개 항목에 동시에 필터를 적용시킬 수 있습니다. 가령, 음료종류는 '탄산음료'와 같으면서 가격은 1500원 이상인 제품을 필터링할 수 있죠 이처럼 여러 개의 조건을 동시에 적용 시킬 때 SQL에선 논리 연산자를 사용합니다. 엑셀로 먼저 살펴보기 이번에도 엑셀로 먼저 기능을 사용해보고, 동일 결과값이 나올 수 있게 SQL을 작성해볼게요 아래와 같은 엑셀이 있다고 가정하고, 필터를 걸어보겠습니다. 1. 음료종류가 '탄산음료'와 같고, 가격이 1500원 보다 크거나 같은 제품 2. 음료종류가 '탄산음료'와 같거나, 재고가 5개보다 작은 제품 (이건.. 2023. 1. 4.
[정리] 모던 자바 인 액션 - 동작 파라미터화 (Behavior Parameterization) 동작 파라미터화(Behavior Parameterization 또는 행위 매개변수)란 아직 어떻게 실행할 것인지 결정하지 않은 코드블록을 의미한다. 이 코드블록은 나중에 프로그램에서 호출하며 즉, 코드 블록 실행은 나중으로 미뤄진다. 코드 블록에 메서드의 동작이 파라미터화 된다. 동작을 파라미터화 하므로서 변화하는 요구사항에 보다 효율적으로 대응 가능해진다. 다음은 예제와 그 과정이다. 첫 번째 시도 : 녹색 사과 필터링 녹색 사과를 필터링 해달라는 요청이 있어 아래와 같이 구현하였다. 기능은 동작하지만 아래 로직으로는 오로지 녹색 사과만 필터링할 수 있다. public static List filterGreenApples(List inventory) { List result = new ArrayList.. 2023. 1. 3.
[SQL] 엑셀로 배우는 SQL - WHERE (IN, NOT IN) 엑셀 필터에서 주로 사용되는 기능 중 하나로 '다중 선택'이 있지요? '다중 선택'을 사용하면 동등 조건 여러 개를 같이 쓰는 효과를 낼 수 있죠! SQL에도 이 '다중 선택'과 동일한 기능을 수행할 수 있는 IN, NOT IN 조건이 있습니다. 같이 살펴볼까요? 엑셀로 먼저 살펴보기 이번에도 이전 장과 동일하게 엑셀로 먼저 기능을 사용해 보고 동일한 결과값이 나올 수 있게 SQL을 작성해 보고자 합니다. 아래와 같은 엑셀이 있다고 가정하고, 숫자와 텍스트가 있는 항목들에 필터를 걸어 볼게요 1. 가격이 1000원, 1200원인 경우 / 1000, 1200원이 아닌 경우 2. 음료종류가 '탄산음료', '이온음료'인 경우 / '탄산음료', '이온음료'가 아닌 경우 SQL로 살펴보기 엑셀 예시와 동일하게 아.. 2023. 1. 3.
[책 리뷰] 객체지향의 사실과 오해 책 정보 https://book.naver.com/bookdb/book_detail.nhn?bid=9145968 객체지향의 사실과 오해 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 서론 나의 첫 회사는 대기업 계열사에 소속된 IT 회사였다 다른 계열사들의 시스템을 유지보수하는 업무를 맡았었는데, 오래 전 만든 시스템을 문제 생기지 않게 보수하고 운영하는 일이었기 때문에 대부분 오래된 소스들이었고 그 안에서도 설계를 포함한 개발을 할 기회는 잘 없었다. 이직 후, 만들어진지 5년도 안된 따끈한 시스템을 맡게 되었고 운영이 아닌 개발 직무를 담당하게 되면서 6년만에 처음으로 (부끄럽게도..) 설계를 포함한 기능 개발을 해보게 되었다. 막상 진짜 설계/개발.. 2023. 1. 2.