자바 33

20220621-22 TIL #인터페이스 #동적 파라미터화 #일급컬렉션

을 읽기 시작했다. 책 자체가 굉장히 잘 쓰여져 느낌을 받았고, 편집도 좋다. 아마 최근에 관심 주제랑도 맞닿아 있어서 더 그런 것 같은데, 왜 람다를 사용해야 하는지에 대해 설득력 있게 느껴지고 있다. 특히 동적 파라미터화로 메서드를 전달할 수 있다는 점이 재미있다. 1. 인터페이스를 활용하면 메서드를 변수로 받을 수 있다. 예를 들어 List을 색깔로 필터할 수 있다. public static List filterApplesByColor(List inventory, Color color) { List result = new ArrayList(); for (Apple apple : inventory) { if(apple.getColor().equals(color)) { result.add(apple);..

회고 2022.06.22

[Java with Unit Test] equals와 hashCode

넥스트스텝에 있는 를 시작했는데, 여기서 학습테스트를 소개하고 있다. https://edu.nextstep.camp/c/9WPRB0ys/ 플레이그라운드 edu.nextstep.camp 익숙하지 않은 API를 공부할 때 단위테스트를 작성하면 해당 API의 사용법도 알 수 있고, 단위테스트에도 익숙해질 수 있다. 코스 시작 부분에서 예제로 String의 몇몇 메서드들을 Junit과 AssertJ를 사용해 단위테스트를 작성하는 연습을 할 수 있다. 단위테스트를 통해 어떤 값이 들어가고, 그 결과가 어떻게 출력되는지 바로 알 수 있어서 좋다. 그래서 Java 공부를 할 겸 프로젝트를 하나 만들었다. Object 모든 클래스의 최고 조상이기 때문에 모든 클래스에서 바로 사용이 가능하다. equals(Object ..

Language/JAVA 2022.06.16

20220609 TIL #스터디 시작!

고민만 하던 스터디를 드디어 시작했다. 우선 가볍게 6월에 4주동안 특별한 주제 없이 모각코를 진행하기로 했다. 항해를 하면서 혼자 코딩하는 것보다 다른 사람들과 함께 코딩하고 개발 이야기를 하는게 즐겁다는 것을 알게 되었고, 함께 항해를 했던 사람들과 지속적으로 교류를 하고 싶다는 목적도 있었다. 함께 스프링을 공부했던 백엔드 개발자 3분과 프론트 개발자 1분, 이렇게 총 5명이 스터디를 시작하게되었다. 처음에 인원을 최대 6명정도로 생각하고 있었고, 인원이 안모이면 항해 슬렉이나 다른 커뮤니티에 올리려고 했는데 항해 단톡방 몇개에서 인원이 다 모이게 되었다. 백엔드 개발자라고 하지만 다들 회사에서 프론트도 좀씩 해야하는 분들이고, 프론트 개발자 분도 node를 공부하고 계셔서 재밌다. 프론트/백이..

회고 2022.06.15

20220608 TIL #인터페이스와 service 구현체

오늘 신기하고 재밌는 코드를 보았다. 우리 프로젝트는 데이터 유형만 다르고 기능은 비슷한 그룹이 여러 개 있는데, 각각 인터페이스와 서비스를 만들다 보니 중복되는 코드가 많다. 그래서 이 중 한 기능을 인터페이스를 하나로 통합하고 각각 데이터 유형별로 구현체가 있는 형태로 바꾸었다. 이렇게 하면 해당 service를 주입받는 controller에 해당하는 구현체를 넣어주면 된다. @Service("exampleServiceType")과 같이 어노테이션을 통해 빈 이름을 설정하고 이 값으로 구현체를 받아올 수 있다. 비슷한 전략을 controller에서도 적용할 수 있다. 이런 방식으로 구현할 수 있다고 예시를 본 것을 참고해서, 간단하게 테스트 프로젝트를 만들어보았다. https://paran21.tis..

회고 2022.06.15

20220607 TIL #쉬기 공부하기 #테스트코드 #자바

모처럼 3일 연휴였다. 직전에 선거날로 하루쉬어서 되게 긴 연휴처럼 느껴질 줄 알았는데 전혀 아니었다. 일단 토요일부터 하루종일 너무너무 피곤했다. 아니 분명 정시에 퇴근하고 있는데 왜 이렇게 피곤한지 모르겠다. 운동을 시작했으니 좀 나아지려나...? 연휴니까 좀 놀고 싶기도 했고, 근데 한편으로는 연휴동안 밀린 공부를 좀 해야겠다고 생각했다. 근데 또 몸이 피곤하니까 잠도 좀 자고싶고?? 토일을 좀 쉬면서(사실 공부해야된다는 강박감이 살짝 생겼다ㅋㅋㅋ요새 대학원 시절이 생각나는 중ㅋㅋㅋ) 월요일에는 그래도 컨디션이 좀 좋아져서 책도 좀 보고 강의도 들었다. 우선, 를 보기 시작했다. 지금 프로젝트에서 단위 테스트 코드를 짜면서 실질적으로 공부가 좀 필요한 것 같아서 구입했다. 그래도 프로젝트하면서 간단..

회고 2022.06.08

20220602 TIL #어떻게 하면 더 좋은 코드를...?

우리 프로젝트의 주요 로직들은 구현이 완료되었고, 앞으로 추가되는 부분들도 이미 구현된 기능에서 크게 달라지지 않을 것 같다. 데이터의 종류만 바뀌고 기능은 정말 거의 비슷하다. 며칠 전부터 새로 추가되는 엔티티에 따라 기능을 구현하면서 소소하게 메소드명을 수정한다거나 하나의 메소드가 많은 일을 하지 않도록 더 분리하는 등 리펙토링 작업도 병행하고 있지만, 기본적으로 너무 중복되는 코드가 많은 것 같다. 나름 처음에 로직들을 구현하면서 팀원들이 코드 중복을 최소화하고 유지보수를 위해 여러 노력들을 했지만 그럼에도 변수 하나, 메소드를 구현하는 구현체가 달라서 새로 작성되는 클래스가 있다. 그렇기 때문에 만약 로직에 수정이 생긴다면 모든 곳에서 수정을 해주어야 하는 상황이다. 인터페이스, 상속 등등을 ..

회고 2022.06.03

20220517 TIL #함수형 인터페이스 #log남기기

오늘 함수형 인터페이스, @Functional Interface에 대해 알게 되었다. 이 인터페이스의 특징은 추상메소드를 하나만 가진다는 것인데(default, static 제외), 정말 재미있어 보이는 점은 이런 예제가 있다는 점이다!!! https://tecoble.techcourse.co.kr/post/2021-11-21-functional-interface-with-lambda/ 함수형 인터페이스와 람다를 이용한 코드 중복 제거 … tecoble.techcourse.co.kr 코딩을 하면서 코드가 정말 비슷해서 리펙토링을 하고 싶은데 정말 애매하게 메서드만 다른 경우를 꽤 봤다. 이거는 어떻게 할 수 없을까, 하는 고민이 있었는데 함수형 인터페이스의 이런 점들을 활용하면 뭔가 코드를 더 깔끔하게 ..

회고 2022.05.17

20220516 TIL #for, stream, 어떤 방식으로 구현할 것인가

JPA 강의 듣기 자바의 정석 공부 소프트웨어 장인 읽는 중 요즘에는 항해 하면서 급하게 기능을 구현하느라 제대로 공부하지 못한 개념들(JPA, 자바 등등)을 정리하는 중인데 생각만큼 속도가 나가지 않는 것 같다. 아무래도 일을 시작하고 나니 조급함이 많이 생긴다. 빨리 팀에 도움이 되고 싶고, 일이 주어졌을 때 더 잘 해내고 싶다. 그래서 간단하게 라도 TIL을 쓰기 위해 노력해야겠다. 마음이 급해지니 짧게라도 오늘 한 것을 남기면서 리마인드하고, 페이스를 조절해야 겠다. 지난주에 작성한 코드 중에 Enum에서 선언한 String을 Enum으로 변환하는 코드가 있었다. 예를 들면, DEPOSIT("입금")에서 "입금"을 DEPOSIT으로 변환하는 것을 구현했다. 구글링 한 코드를 참고하여 for문으로..

회고 2022.05.16

#JVM(Java Virtual Machine)

JVM : 자바 가상 머신 가상머신 : 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있다. 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다. 자바 프로그램과 달리 JVM은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 한다. 자바 가상 머신이라는 한 단계를 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점을 가지고 있다. 구성 자바 인터프리터(interpreter) : 자바 컴파일러에 의해 변환된 자바 바이트 코드를 일고 해석하는 역할. 클래스 로더(class loader) : 동적으로 클래스를 로딩해줌. 자바는 동적으로 클래스를 읽어오므로, 프로그램..

Language/JAVA 2022.01.24

20220120 개발일지(WIL)

이번 주차는 알고리즘 기초 주간이었다. 개발일지라기보다는, 공부일지에 가까운 것 같다. 알고리즘 주간이었지만 실제 알고리즘을 공부했다기 보다는 JAVA 기본 문법을 익히는 시간이었다. 선정된 문제들은 프로그래머스 level 1 단계 문제들로, 찾아보니 1단계는 알고리즘에 대한 지식없이도 기본 문법을 가지고도 풀 수 있는 문제라고 한다. 처음에 JAVA라는 언어에 매력을 느꼈던 부분 중 하나는 타입과 관련된 부분이었다. 그런데, 실제 공부하면서 특히 초창기에 가장 힘들었던 부분도 타입이었다. 타입에 따라서 사용할 수 있는 메소드가 너무 달랐고, 문제에서 요구하는 타입으로 변환해서 반환하는 것도 힘들었다. 특히 처음에는 자바가 어떤 언어인지, 메소드는 어떻게 쓰는 건지, 어떤 식으로 동작하는지 파악이 안되서..