본문 바로가기

SW 개발 이야기

(5)
Functional interfaces in Java (standard functional interfaces) Java 8부터 함수형 프로그래밍(functional programming)을 지원한다. Java 함수형 프로그래밍의 가장 기초는 아무래도 함수형 인터페이스(functional interface)이다. JDK 내에 많은 기능들, 특히 collections과 관련된 기능들은 함수형 인터페이스를 기반으로 제공된다(eg: ```Iterable``` 인터페이스의 ```forEach(Consumer)``` 메서드 정의의 ```Consumer``` 파라미터). 람다 표현식도 이 함수형 인터페이스를 활용해 코드를 간결하고 효율적으로 표현할 수 있게 한다. 1. 함수형 인터페이스 우선 함수형 인터페이스 정의부터 알아보자. Java 8의 ```java.util.function``` 패키지에는 43개의 함수형 인터페이스가..
CSV 파일 기반 List 활용 (Code Analyst 코드 이야기 #3) Code Analyst는 여러 점검을 수행하고 그 결과를 제공한다. 일부 점검은 결과가 크기도 한데, 몇 천 정도가 나오기도 한다. 예를 들면 전체 소스에 중복 코드 목록이 그렇게 되는 경우가 많다. 문제는 이런 여러 결과를 메모리에 보관해야 하는 부담이다. 그래서 생각한 방식이 List 인터페이스를 갖으면서 리스트 내용이 파일로 보관하는 것이다. 오픈소스SW를 여기 저기 찾아봤지만, 그런 기능을 제공하는 것을 찾지 못했다. 그래서 직접 구현하기로 했고, 이를 Code Analyst에서 잘 사용하고 있다. 우선, 해당 코드는 github.com/RedCA-Family/code-analyst/blob/development/src/main/java/com/samsungsds/analyst/code/util/..
System.exit() 무효화 하기 (Code Analyst 코드 이야기 #2) 외부 오픈소스SW 라이브러리를 사용하다 보면, 가끔 정상적이든 비정상적이든 System.exit()로 끝나는 경우가 있다. 주로 커맨드 라인(Command Line) 방식에서 그렇게 사용된다. Code Analyst에서도 CheckStyle을 사용할 때 오류가 발생하면 강제 종료가 되는데, 이를 간단하게 무효화 할 수 있다. 2020/10/28 - [SW 개발 이야기] - Code Analyst(코드분석) 오픈소스SW 개발 이야기 package com.samsungsds.analyst.code.util; import java.security.Permission; public class SystemExitDisabler { public static class ExitTrappedException exten..
Log4j 실시간 로그 레벨 변경하기 (Code Analyst 코드 이야기 #1) 지난번에 오픈소스로 공개한 Code Analyst에 대해 잠깐 소개한 적이 있다. 2020/10/28 - [SW 개발 이야기] - Code Analyst(코드분석) 오픈소스SW 개발 이야기 그리고 특징적인 부분을 정리하기로 했는데, 첫번째로 간단하게 Log4j에 대한 로그 레벨을 실시간으로 변경할 때 사용할 수 있는 코드를 소개한다. 로깅은 보통 SLF4J(Simple Logging Facade for Java)를 앞에 두고 실제 구현체만 log4j를 많이 사용하지만, Code Analyst에는 log4j를 그대로 사용했으며, 다음과 같은 처리를 통해 쉽게 원하는 로거의 레벨을 실시간으로 변경을 할 수 있다. package com.samsungsds.analyst.code.util; import org...
Code Analyst(코드분석) 오픈소스SW 개발 이야기 회사 업무 상 여러 inspection 툴과 지표(metrics)들을 측정하고 개선을 가이드하던 적이 있다. 이 때 개인적인 필요에 의해, 종합적으로 여러 지표들을 분석하는 Code Analyst라는 툴을 만들어 사용했다. 처음 만들 때에 다음과 같은 기준과 목표로 개발을 시작했던 것 같다. 인터넷 연결이 되지 않더라구 사용 가능해야 한다. 당연히 여러 지표들을 한번에 측정해야 한다. 손쉽게 사용할 수 있도록 별도 설치 없이 CLI(Command Line Interface)로 실행 가능 확장성을 위해 API 제공 오픈소스SW 라이선스를 준수한다. Apache License 2.0, MIT, BSD 등의 대부분 문제 없는 라이선스 오픈소스 활용 GPL 라이선스 배제 : 상업적 활용이 어렵고, 개발된 소스의..