목록전체 글 (102)
영호
동일성 두 객체가 물리적으로 같은 주소에 저장되어 있는지에 대한 성질로 ==연산자를 통해 동일성을 비교할 수 있습니다. 동등성 두 객체의 필드값이 같은지에 대한 성질입니다. 두 객체의 필드 값이 같다면 두 객체는 논리적으로 동등하다고 할 수 있고, equals()를 통해 비교 가능합니다. 객체 비교 방법 우리는 객체가 같은지 비교할 때 equals()를 사용한다. 그 이유는 ==은 객체의 주소를 비교해 두 객체가 동일한지 물리적 동일성을 비교한다. equals()는 객체의 주소가 아닌 내부 필드값들이 같은지 논리적 동등성을 비교한다. 이제부터 equals를 쓰기 위해 equals, hashCode에 대해 알아보겠습니다. equals와 hashCode를 재정의 하면 contains에서도 이점을 볼 수 있습..
들어가며 이번 글에서는 프리코스부터 레벨 1 미션동안 빠지지 않던 요구사항인 원시값 포장에 대해 미션을 진행하면서 이것이 왜 필요한지, 반드시 적용해야 하는지에 대한 주관적인 입장을 정리해보겠습니다. 우선 메서드의 파라미터에 동일한 타입이 존재할 경우 오용을 방지할 수 있다고 생각합니다. 파라미터에 동일한 타입이 존재하는 예시 public class Person { private final String name; private final String address; Person(final String name, final String address) { this.name = name; this.address = address; } } 위 코드처럼 작성한 경우 클라이언트에서 아래와 같은 실수를 할 수 있습..
우선 Spring의 특징 Spring은 객체지향의 장점을 살릴 수 있도록 도와줍니다. 객체지향 프레임워크는 객체들의 집합으로 객체들 간의 협력을 통해 기능을 완성시키기 때문에, 객체 간 의존관계를 잘 관리해야 합니다. 그렇다면, Spring에서는 어떤 식으로 객체들을 관리하는지 알아보겠습니다. 우선, Spring에서는 이러한 객체들을 빈(bean)이라는 개념으로 표현합니다. 스프링 컨테이너에 빈들을 등록하고 관리하는 방식입니다. 빈을 등록하는 방법에는 @Bean, 컴포넌트 스캔을 활용하는 방법 2가지가 있습니다. 이 2가지 방법을 비교해 보겠습니다. @Bean @Configuration public class ApplicationConfig { @Bean public ARepo aRepo() { retu..
개요 Spring은 객체지향의 장점을 살리면서 개발할 수 있는 프레임워크입니다. 객체지향 프로그래밍은 여러 객체들이 서로 의존하면서 주어진 기능을 수행합니다. 이를 위해 Spring에선 BeanFactory, ApplicationContext를 제공해 객체들을 관리해 줍니다. BeanFactory 스프링 공식문서를 보면 "The root interface for accessing a Spring bean container." 즉, 스프링 빈에 접근하기 위한 기능들을 제공해 줍니다. 스프링 컨테이너의 최상위 인터페이스입니다. 스프링 빈을 조회, 관리하는 역할을 담당합니다. 스프링 빈 조회 시 사용되는 getBean() 메서드를 제공합니다. 그렇다면 ApplicationContext는 스프링 빈에 대해 어..
의존성 역전 원칙(DIP)란 간단하게 말해 "구체 클래스가 아닌 추상화에 의존해라"입니다. DIP에 찾아보면 고수준 모듈(클래스), 저수준 모듈(클래스)이란 단어가 많이 보입니다. 저수준 모듈은 고수준 모듈의 작업을 돕는 역할입니다. 이는 고수준 모듈이 저수준 모듈에 의존한다는 것을 의미합니다. 그러나 DIP는 고수준 모듈은 저수준 모듈에 의존하는 것이 아닌 추상화에 의존해야 한다고 합니다. 위 그림은 고수준이 저수준을 직접 의존하는 관계입니다. 만약, 스노우타이어에서 산악 드라이브를 위해 이에 적합한 타이어로 구체 클래스를 변경한다면 자동차에도 변경에 대한 영향이 연쇄적으로 미칠 것입니다. DIP준수 현재 자동차라는 고수준 모듈이 직접 스노우타이어라는 저수준 모듈에 의존하고 있습니다. 그러나 저는 이를..
개요 우아한테크코스 백엔드 5기 최종 코딩 테스트 후기를 작성해보려고 합니다. 문제를 보고 느낀 점 최종 테스트를 보기 전 같이 피어리뷰 스터디를 하던 분들과 중꺾마 얘기를 하고 갔기 때문에 아무리 어려워도 끝까지 최선을 다한다는 마음으로 임했습니다. 사실 처음엔 문제가 잘 이해되진 않았지만 하나씩 풀어나가다 보니 서서히 풀린다는 느낌을 받았습니다. 최종 코딩 테스트 관련 메일에서 돌아가는 쓰레기를 만드는게 더 낫다는 내용이 있었지만, 제 코드를 완전히 신뢰할 수 없기에 최소한의 테스트코드를 작성하려고 했습니다. 실제로 이렇게 구현을 하다 보니 시간이 촉박하긴 했습니다 ㅎ,, 그리고 기능목록도 계속해서 업데이트하려고 했습니다. 그동안 해왔던 방식인 각 기능목록을 체크박스로 만들고 구현 완료 시 체크하는 ..
개요 Enum을 활용하다 보면 filed값을 이용해 Enum 인스턴스를 조회해야 하는 경우가 있습니다. 이때, Stream, HashMap 등을 사용할 수 있습니다. 이 글에서는 HashMap을 활용한 Enum인스턴스 조회 방법을 알아보겠습니다. HashMap활용 코드 package enumPractice; import java.util.Arrays; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public enum Number { ONE(1), TWO(2), THREE(3); private final int number; Number(int number) { this.number ..
개요 4주 간의 프리코스가 끝나면서 소감을 정리해보려고 합니다. 4주 간의 소감 프리코스를 진행하기 전 저는 객체지향에 대한 감이 없었습니다. 4주 동안 의식적인 연습을 통해 미션을 수행하면서 메서드를 분리하고, 클래스를 분리하고, 코드 컨벤션을 지키려고 노력했습니다. 그러다 보니 1주 차에 어색했던 부분이 2주 차에서 보다 능숙해지고 2주 차에 어색한 부분이 3주 차에는 보다 능숙해지는 경험을 할 수 있었습니다. 프리코스를 마치고 1, 2주 차의 코드를 보면 정말 리팩터링 할 요소가 너무 많이 보입니다. 그만큼 프리코스 기간 동안 성장한 거 같아 기쁘고, 앞으로도 다른 기수의 프리코스 내용을 연습하면서 계속해서 역량을 키워나갈 예정입니다. 4주 동안 힘들기도 했지만, 많은 성장을 할 수 있어서 보람 있..