코딩 21

20220703 TIL #불변 객체를 사용하는 이유

개발을 시작하고 코딩을 하면서, 이 책에서는 몇 번을 읽어도 이해가 안되던 설명이 우연히 다른 걸 공부하다가 '아, 이런 뜻이었구나' 할 때가 있다. 자바를 공부하면서 이해가 잘 안되는 용어 중 하나가 '불변 객체'를 사용하는 것이었다. 그런데 김영한님의 JPA 강의를 듣다가 왜 불변객체를 권장하는지 조금 이해하게 된 것 같다. 모두 다 정확하게 이해한 건 아니지만, 앞으로 공부하는데 실마리가 될 것 같아서 기록해둔다. primitive type과 달리 객체는 참조가 가능하다. 즉, 각각의 변수들이 같은 객체를 참조하고 있을 수 있다. 예를 들어, 새로운 Value a를 만들고, b가 a를 가리킨다면 둘은 같은 객체를 참조하게 된다. public static void main(String[] args) ..

회고 2022.07.05

20220630 TIL #객체에게 메시지를 보내자

넥스트스탭에서 과정을 수강하고 있는데, 최근에 굉장히 인상깊은 내용이 있었다. 객체를 가져와서 그 값을 처리하는게 아니라, 해당 객체에게 메시지를 보내라는 것이다. 예를 들어서, 이런 식으로 if문에 원하는 조건을 검증하기 위해 해당 객체의 값을 getter로 가져와서 비교하는 것이 아니라 for (int i = 0; i < QUANTITY_OF_BALL; i++) { if (Integer.parseInt(inputs[i]) == answer.getBalls().get(i)) { strikeCnt++; continue; } for (int j = 0; j < QUANTITY_OF_BALL; j++) { if (Integer.parseInt(inputs[i]) == answer.getBalls().get(..

회고 2022.07.01

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

20220609 TIL #스터디 시작!

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

회고 2022.06.15

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

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

회고 2022.06.08

20220525 TIL #서버에서 프론트까지 작업하기 #테스트코드 작성하기

현재 진행하는 프로젝트는 TDD는 아니지만 관심이 많은 맴버들이 참여하고 있고, 나도 프로젝트를 하면서 테스트코드가 있으면 리펙토링 하기 훨씬 쉽다는 걸 느꼈기 때문에 가급적 테스트코드를 짜려고 노력하고 있다. (일단 수정 후 테스트코드로 확인하면 된다는 마음의 안정이 생긴다!) 그런데 테스트코드를 짜는 것도 쉽지 않다. 어떤 목적에서, 어떤 것을 테스트할지도 고민이 많이 되고, 생각이 있어도 코드로 구현하는 것 자체가 어렵다. 그래도 팀 맴버 중에 관심이 많은 분이 있어서 그분 코드를 많이 참고 하고 있고, 서비스 단에서 간단하게 정말 기능만 정상적으로 작동하는지 확인하는 정도는 이제 작성할 수 있게 되었다. repository에 Mock 대신 Fake 객체를 사용하는 것도 재밌었다. Mock을 사용하..

회고 2022.05.25

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

20220504 TIL #업무로 개발하기

오늘 프로젝트 회의를 하다가 팀장님이 해주신 말씀 중에 인상 깊었던 부분이 있었다. 내가 이해한 걸로 표현하면 "업무로 개발하기"이다. 클린코드로, 성능도 좋고, 구조도 깔끔하고, 유지보수도 쉬운 멋있는 코드를 작성해서 개발하면 너무너무 좋겠지만 단순히 취미로 개발을 하는 것이 아니라면 개발자는 결국 기한 안에 필요한 기능을 구현해야 한다. 요구사항을 기한 안에 끝내는 것과 더 좋은 코드를 작성하는 것, 이 사이에서 어떻게 하면 균형을 잘 잡을 수 있을까? 우선은 기한 안에 끝내야 겠지만, 좋은 개발자라면 그 기한 안에서도 더 좋은 코드를 작성하지 않을까?? 그리고 '기한'이라는 것이 적절한 동력을 줄 수 있다고 생각한다. 분명 기한을 정하지 않고 아무 계획도 없이 ~를 만들어보자! 라고 생각한다면 다른..

회고 2022.05.05

#웹페이지간의 질의는 어떻게? GET, POST, jinja

사전 강의에서는 한 페이지 - 서버 간의 데이터 이동이 있었는데, 이번에는 여러 페이지를 만들다보니 어떻게 해야하는지 개념이 잘 잡히지 않아서 어려웠다. 페이지1에서 입력한 변수로 페이지2에서 결과 값을 보여주어야 하는데 처음에 이걸 도대체 어떤 모양으로 잡아야지, 에서 한참 시간이 걸린 것 같다. 페이지1에서 function search() { let sigun_name = $('#sigun_name option:selected').val() let choose = $('#choose').val() $.ajax({ type: 'GET', url: '/search', data: {sigun_name_give: sigun_name}, success: function () { let temphtml = `/..