Java(23)
-
스프링 컨테이너와 서비스 로케이터가 필요한 이유
잡담 더보기 맨 처음 보았던 강의가 영한님의 스프링 핵심 원리 - 기본편이었다. 해당 강의에서는 OOP에 관한 간략한 내용을 설명하고 스프링 컨테이너에 관한 내용을 이야기한다. 당시에는 OOP에 관한 내용이 정확하게 이해되지 않았고 왜 스프링 컨테이너가 필요한 지 정확하게 이해가 되지 않았다. 아마도 정확하게 이해가 안돼서 그런 것 같았다. 반복적으로 OOP에 관한 책 내용을 읽으면서 다시 이 내용을 복습해야 할 필요가 있음을 느꼈고, 과거 강의와 함께 이해한 내용을 정리해보려고 한다. 1. 상속의 문제점과 조립 과거의 글에서 짧게 나마 아래의 이미지와 함께 자바에서의 다중 상속에 관한 이야기를 했었다. 해당 내용을 요약하면, 기능의 추가를 위해 다중상속을 하는 것은 상위 클래스의 수정을 어렵게 만들며,..
2024.04.16 -
자바와 SOLID 원칙(TIL)
잡담 더보기 항상 자바의 캡슐화, 다형성, 추상화, 상속과 SOLID라는 원칙은 참 이해가 안된다. 디자인 패턴 책을 한 번 보고는 완전히 이해가 안돼서 계속 반복해서 본 것 같다. 그 과정에서 내가 이해한 바를 정리하고자 한다. 책에서 나온 예시도 그렇고 전체적인 내용은 다음 글의 작성자 분이 정말 잘 정리해주셨다고 생각한다. 개인적으로 이는 간단한 정리를 위한 것이며 필요할 때마다 예시를 찾고 싶다면 위의 링크 글 혹은 최범균님의 "개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴" 책의 2장을 읽어보길 바란다. 1. 단일 책임 원칙 계속 공부를 하다보면 단일 책임 원칙과 인터페이스 분리 원칙이 헷갈리기 시작한다. 둘 다 최대한 역할을 작게 만들어라 같은데 어떤 차이가 있는지 한 번 고민해보자. ..
2024.04.13 -
자바의 상속, 추상, 다형에 관하여(TIL)
작성 배경 더보기 이전에 "스프링 입문을 위한 자바 객체 지향의 원리와 이해"라는 책에서도 OOP 관한 설명이 있었다. 그 책에는 SOLID원칙과 캡상추다!라면서 캡슐화, 상속, 추상화, 다형성에 관한 설명이 있었다. 처음 배우는 내용이기도 했고 저자에게는 미안한 얘기지만 예시가 부실해서 이해가 안됐다. 지금은 여러 강의도 듣고, 책을 보면서 조금은 이해가 된 것 같다. 그 과정에서 드는 생각은, 프로그래밍이 공부를 할수록 같은 것도 다르게 보이는게 있어서 참 좋은 것 같다. 개인적으로 객체 지향에서 말하는 4가지 요소를 공부하며 느낀 바는, 캡슐화와 나머지로 묶는게 이해가 편하지 않나 싶다. 캡슐화에 관한 이야기는 앞의 getter에 관한 글에 어느정도 정리가 되어있으니, 생략하도록 하고 이 글에서는 ..
2024.04.12 -
자바의 Getter에 대하여
글의 작성 배경 더보기 더보기 Private로 된 내부 변수를 외부에서 값을 가져오거나 변경할 수 있는 방법이 있다. 바로 Getter와 Setter이다. 여담이지만 작년 4월까지 이걸 몰라서 안드로이드 강의 실습시간에 private 객체를 외부로 가져오는 방법이 뭐였죠?라는 말에 답변을 하지 못했었다. 아무튼, 사용자체도 쉽고 개발의 편의를 위해서 Getter, Setter를 열고 이 때까지 프로젝트를 진행했었다. 그런데 유튜브에서 다른 사람 코드리뷰 혹은 코드 작성 가이드라인을 보면 자주 등장하는 말이 "Getter 쓰지 마세요.", "Setter 쓰지 마세요."라는 말을 진짜 많이 본다. 솔직히 해당 내용을 보는데 항상 설명은 안 해줘서 "뭐 어쩌라고?"라는 생각이 많이 들었다. 그래서, 몇 번 이..
2024.04.12 -
JPA에서 조회 값을 Optional로 바꾸어보자 - 1편
스프링 데이터 JPA를 사용하면 자동으로 만들어주는 함수들 중에 Optional 타입으로 반환하는 것들이 있다. 강의에서도 Optional은 그냥 get쓰면 안된다고 말을 하는데, 왜인지 잘 모르겠고 Optional이 더 불편하게 느껴졌었다. Optional을 잘 몰라서 그런 것 같아, Optional을 계속 보고 기존 비 Optional을 Optional로 바꾸어보며 어떻게 변했는지 알아보는 과정을 가져보려고 한다. [ Optional을 통한 null 체크 분기 줄이기와 orElse, orElseGet ] 비 Optional을 사용해서 객체를 내보내는 함수이다. 기존의 코드는 리포지토리와 컨트롤러에 각각 다음과 같이 작성이 되어있었다. 로직이 복잡한 것은 아니라 문제성이 크게 드러나진 않는다. 하지만 ..
2024.03.21 -
Extends와 Implements - 삽질 일기
[ Extends와 Implements ] 디자인 패턴을 공부하다보니 extends 키워드와 Implements 키워드를 쓸 일이 굉장히 많아졌다. 그런데 어떤 상황 별 사용하는 건지 굉장히 혼잡하다는 느낌이 들었고 이 부분에 관해서 한 번 정리를 해보고자 한다. [ extends 키워드 ] extends는 상속과 관련이 있다. extends로 상속을 받으면 자식은 부모의 내부 형질을 물려받는다. 이건 장점일 수도 있고 단점일 수도 있다. 우선 extends의 메서드 접근 제어자 별 알아야 할 점들을 알아보고 [ extends와 접근 제어자 ] 더이상 구현할 필요가 없다면 부모의 메서드나 필드를 그대로 물려받아도 되고 부모의 메서드나 필드를 상속 받아서 재정의해도 된다. 해당 방식은 상속 받은 클래스 내..
2024.03.02