Languages 69

[java] Function을 활용하여 If문 제거하기

회사에서 기존에 작성되어있는 코드를 보다 하나의 method 내에 십여개의 if문...으로 작성된 파일을 보게 되었습니다. 파악하는게 너무 힘들더군요... 그래서 조금 더 파악하기 쉽고 유지보수에 효과적인 코드는 없을까 고민을 했다 예전에 차장님이 구현해놓으신(당시에는 Functional Interface를 몰라 이해하기 무척 어려웠다는 사실은 비밀) 코드와 몇일전에 보았던 다른 언어들의 if문 처리 방법에 대해 생각이 나더군요. 그래서 그것과 비슷한 방식으로 전반적인 refactoring을 진행해 보았습니다. 적용을 다 하고 나니 정리할 필요가 있을 듯 해서 sample 코드를 사용해서 java에서 if문을 제거하는 방법을 정리해 보았습니다. Sample if 가 '많이' 사용되고 있는 ..

Languages/java 2022.11.09

[java]default method의 호환성

모던 자바 인 액션의 default method 부분을 읽던 중에 호환성이란 단어를 지나치게 되었습니다. 그러다 문득 제가 생각하는 호환성과 프로그램에서 이야기하는 호환성이 맞나? 하는 의문을 가지고 있을 때 책에서 호환성에 대해 한번 더 상세하게 설명을 해 놓았더군요. 그래서 이를 글로 작성을 해 보려고 합니다. default method default method는 자바 8에서 처음 나타난 기능으로 List 인터페이스에 sort() 기능이 추가되면서 입니다. 내부를 보시면 아래와 같이 default 메서드를 사용해서 기존에 List 인터페이스를 상속한 모든 클래스를 사용자들이 수정하지 않을 수 있도록 default 메서드 기능을 사용했습니다. 인터페이스에 static 메서드를 추가하지 않고 왜 def..

Languages/java 2022.10.26

[Junit] private Method 테스트하기2(Exception 검증)

얼마전 Junit 중 privateMethod를 테스트 하는 중에 실패했을 경우에 대해 test를 하려다 의도한 대로 풀리지 않아 해당 테스트를 진행하지 못하고 있었습니다. 그러던 중 토비의 spring 책에서 해당 관련된 exception 확인하는 방법을 찾았습니다.ㅎㅎ 생각보다 쉬운 방법이었지만 그때 당시에는 떠오르지 않더군요!ㅎㅎ(분명 해당 exception 내부를 확인하면 될것 같았지만 그 내부를 확인하는 방법을 몰라서 못했었었네요ㅠㅠ) 그래서 관련된 해결법을 작성해 보도록 하겠습니다. Before we go further 이 글은 private method를 junit으로 Exception테스트를 어떻게 하는지에 관해 작성되었습니다. 만약 private method를 junit으로 어떻게 테스트..

Languages/java 2022.09.23

[JUnit] private Method 테스트하기!

사실 private Method가 test가 되지 않은 이유는 기본적으로 테스트할 필요가 없게끔 구현하라는 의도가 깔려 있다고 생각합니다. 하지만 가끔 private Method를 테스트 해야할 때가 존재합니다. 저 같은 경우 중간에 인수인계받은 작업이 존재하는데 spec이 변경되면서 해당 Method만을 테스트 해야 하는 상황이 존재했습니다. 검색하고 나름의 방법을 찾은 후 해당 방법에 대해 정리해 보겠습니다. Method와 ReflectionTestUtils 테스트 방법에는 여러가지 방법이 있지만 여기서는 두가지 방법을 다뤄보겠습니다. java.lang.reflect.Method org.springframework.test.util.ReflectionTestUtils TestCode 아래와 같이 Pr..

Languages/java 2022.09.07

[Java] 함수형 인터페이스(Functional Interface) 알아보기

요즘 프로그램을 짤 때 Stream API를 사용하고 있습니다. 하지만 Stream에서 주로 사용되는 여러가지 Class Type들이 너무 낯설더군요. Stream을 사용하기 위해선 lambda를 사용해야하고 lambda를 사용하기 위해선 함수형 인터페이스(Functional Interface)를 사용해야 하더군요. 그래서 함수형 인터페이스(Functional Interface)에 대해 알아보았습니다. 검색을 해 보니 Stream, lambda 그리고 Functional Interface 세가지를 활용한 프로그래밍을 Functional programming이라고 하더군요. 다음에는 Functional programming을 알아보겠습니다. 아래에 정리한 코드들은 모두 gitHub에 올려 놓았습니다. 필요..

Languages/java 2022.08.04

[RegEx] 정규식 사용하기(vsCode)

vsCode를 활용한 정규식 사용 프로젝트를 진행함에 있어 기존의 코드들을 형태는 비슷하지만 조금 수정해야할 일이 종종 있습니다. 이럴 때 하나씩 수정을 하다 보면 회의감이 강하게 들더군요. 이때 제 선임분 중 한분이 terminal에서의 sed 사용과 vsCode에서의 regularExpression을 사용하여 손쉽게 변경하는 방벙을 알려 주셨습니다. sed는 추후에 따로 다뤄보고 이번에는 vsCode를 활용하여 제가 실제 사용했던 방법들을 작성해 보도록 하겠습니다. 정규식(Regular Expression) 정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp[1] 또는 regex, rational expression)[2][3] 또는 정규식(正規式)은 특정한 규칙을..

Languages 2022.07.26

[Java] Lombok의 @ToString(부모의 toString() 함께 출력하기)

이번에는 프로젝트를 진행하는 중에 간단하지만 자주 잊어먹는 기능 중 하나인 lombok의 @ToString()에 대해서 작성해 보겠습니다. 예전에 프로젝트를 진행 중에 분명 사용했었는데 @Override를 직접 작성해서 사용하고 있었네요. 그럼 아래에 작성해 보도록 하겠습니다. code @Data public class ParentDTO { private String i; private String am; private String your; private String papa; } @Data public class ChildDTO extends ParentDTO { private String scream; } @Data public class LombokClientDTO { private ParentD..

Languages/java 2022.07.06

[Java] Enum변수를 json으로 변환하여 Enum 값 전달하기

회사에서 근무하던 중 DTO를 json으로 변환해 넘겨주는 작업을 했습니다. 이때 값을 넘기는 도중 발생하였는데 확인해 보니 enum의 값이 제대로 넘어가지 않는 문제였습니다. 이 문제를 해결한 기록을 남기고자 합니다. 발단 DTO 내부에 Enum 변수를 들고 있는 상황입니다. Enum변수에 enum을 전달 한 후 json으로 변환 하였을 때 enum의 값이 출력되는게 아니라 name이 출력되는 현상을 겪었습니다. DTO package com.example.dailyProgramming.enum_test; import lombok.Data; @Data public class Enum_getTest { String str; TestEnum1 enumTest; public enum TestEnum1{ AA(..

Languages/java 2022.06.30

[Java] Exception(checked, Unchecked Exception)

현재 개발중인 프로젝트에서 Exception 처리에 대한 error를 다루다 Exception 관련해서 자료를 찾아보게 되었습니다. 그런데 지금으로부터 1년 전, 국비수업을 정리했던 글 중 Exception을 다룬 글이 있더군요. 링크 예전에 한번 정리했던 내용인데 어느덧 다시 잊어먹게 되어 한번 더 정리를 해 봅니다. 예외(Exception) 프로그래밍에서의 예외(Exception)은 프로그램 실행 중 개발자의 의도와는 다르게 정상적인 프로그램 흐름을 어긋나는 것을 말합니다. 그리고 자바의 경우 개발자가 직접 예외 상황을 처리할 수 있습니다. 에러(Error)는 시스템에서 발생한 비정상적인 상황으로 개발자가 처리할 수 없습니다.(에러를 상황을 잡아도 처리할 방법이 없습니다.) Exception에는 Ch..

Languages/java 2022.06.16

[java]상속보다는 컴포지션을 사용하기

스터디에서 디자인패턴의 composite 패턴에 대해 이야기 하다 상속보다는 컴포지션을 사용하라라는 말이 나왔습니다. 이게 무슨말인가 싶어 다른 분의 간단한 설명을 듣긴 했지만 잘 와닿지 않더군요. 그러던 중 본인이 공부했던 링크를 남겨 주셔서 보았습니다. 역시 글로 읽어서도 제대로 와닿지 않아 읽은 내용을 조금 정리하면서 작성해 보았습니다. 사용 class Engine {} // The Engine class. class Automobile {} // Automobile class which is parent to Car class. class Car extends Automobile { // Car is an Automobile, so Car class extends Automobile class. ..

Languages/java 2022.05.09
728x90
반응형