개발하면서 깃허브 코드를 참고하다보니 가끔씩 함수의 파라미터에 final 키워드가 들어가는 것을 확인했습니다. 왜 사용하는지? 사용하면 어떤 이점이 있는지 알아보겠습니다. Final은 변경불가능하다는 키워드 입니다. 그렇다면 메소드 파라미터에 사용하는 것은 해당 파라미터가 변경불가능하다는 뜻인데, 어떤 이점이 있을까요? 장점 재할당되서 발생할 수 있는 문제는 컴파일 타임에 바로 잡아 줄 수 있습니다. 변수의 상태 변화를 추적할 필요가 없으므로 코드가 더 쉽게 읽힙니다. 불변성 강조: final 키워드가 붙은 파라미터는 메소드 내에서 수정할 수 없습니다. 이는 코드를 읽는 사람에게 해당 변수가 변경되지 않을 것임을 명확하게 알려줍니다. 그렇다면 Final이 불변성을 의미하는 것일까요? ->아닙니다. 찾아보..
프록시 객체는 실제 객체를 대신하여 요청을 처리하는 객체입니다. 실제 객체와 같은 인터페이스를 구현하여 실제 객체를 대신하여 요청을 처리할 수 있습니다. 프록시 객체는 실제 객체를 보호하거나, 실제 객체의 기능을 확장하거나, 실제 객체의 로직을 변경하는 데 사용할 수 있습니다. 프록시 객체를 사용하는 이유 프록시 객체를 사용하는 이유는 다음과 같습니다. 실제 객체 보호 프록시 객체는 실제 객체를 대신하여 요청을 처리할 수 있습니다. 따라서 실제 객체가 직접 요청을 받지 않으므로 실제 객체를 보호할 수 있습니다. 실제 객체의 기능 확장 프록시 객체는 실제 객체의 기능을 확장할 수 있습니다. 예를 들어, 프록시 객체는 실제 객체의 요청을 기록하거나, 실제 객체의 요청을 캐싱할 수 있습니다. 실제 객체의 로직..
개발하면서 API 응답 값으로 Map으로 넘겨주거나 DTO 클래스나, ErrorResponse등 클래스를 넘겨주는 방식으로 사용합니다. 하지만 알기로는 응답 값이든 데이터를 주고받는 데 있어서 대부분 Map 의 사용을 지양하라고 합니다. 왜 그런지 간단하게 알아보겠습니다. Map의 사용을 지양하는 이유가 무엇일까요? Map을 사용할 때의 단점은 다음과 같습니다. 컴파일 에러를 유발할 수 없음 key 또는 value가 null이면 Map의 해당 필드 자체를 key로 가져가지 않음. String 텍스트를 Key로 사용함 가독성이 떨어짐 타입캐스팅 비용이 발생함 불변성을 확보할 수 없음 1. 컴파일 에러를 유발할 수 없음 Map의 Value는 Object 타입이다. 그리고 Object 클래스는 최상위 클래스..
웹 애플리케이션에서 컨트롤러를 테스트할 때, 서블릿 컨테이너를 모킹하기 위해서는 @WebMvcTest를 사용하거나 @AutoConfigureMockMvc를 사용하게 되는데 이 어노테이션들에 대해 알아보겠습니다. @WebMvcTest 일반적으로 사용하는 MVC 테스트용 어노테이션입니다. 해당 어노테이션을 명시하고 아래와 같이 MockMvc를 @Autowired하면 해당 객체를 통해 MVC테스트가 가능합니다. 이 어노테이션을 사용하면 MVC 관련 설정인 @Controller, @ControllerAdvice, @JsonComponent와 Filter, WebMvcConfigurer, HandlerMethodArgumentResolver만 로드되기 때문에, 실제 구동되는 애플리케이션과 똑같이 컨텍스트를 로드..
Spring 을 개발하다보면 가끔 VO 혹은 DTO를 사용할 적이 있습니다. 겉보기엔 둘이 같아보이기도 한 둘을 어떠한 목적을 갖고 사용하는지에 대해 알아보려고 합니다. VO (Value Object) 값을 가지는 객체 데이터 불변이어야 하고, 저장된 값을 불러와야하는 경우에 사용합니다. 값이 같다면 동일한 객체 같은 객체인지 판단하기 위해 각 속성들의 값을 비교함 equals() 메서드와 hashcode() 메서드를 오버라이드해서 객체 비교를 구현합니다. 예를 들어, 서울의 지역번호를 저장할 때 서울의 지역번호는 상식적으로 '02' 이며, 이 번호는 변하는 값이 아닌 고정된 값입니다. 그렇기 때문에 VO로 저장하고 Getter로 호출하여 사용합니다. DTO (Data Transfer Object) ..
https://start.spring.io 에서 Packaging을 할 때 Jar와 War의 차이점이 궁금해졌다. 우선 Packaging이 뭘까? .jar 와 .war 모두 아카이브 파일이고 , 어플리케이션을 배포하고 어느 환경에서나 구동시킬 수 있도록 관련 파일들을 하나로 묶어주는 것이라고 한다. JAR ? JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일 내장톰캣을 사용 webapp경로 사용 안함 JRE 만 있어도 실행 가능함 WAR ? Servlet / JSP 컨테이너에 배치할 수 있는 웹 어플리케이션 압축파일 포맷 별도의 웹서버 또는 웹 컨테이너 필요 (톰캣을 별도로 설치) 사전 정의된 구조를 사용한다(WEB-INF, META-INF) 간단하게 이정도 차이점이 있겠다 JAR, ..
- Total
- Today
- Yesterday
- 스위치
- spring
- 개발
- 회고
- s3
- osi7계층
- tcp
- SpringBoot
- 삽질
- 계층
- rds
- Spring Boot
- 알고리즘
- 프로토콜
- 회고록
- ec2
- 라우터
- 3Way Handshake
- 네트워크
- 초보
- Docker
- dto
- aws
- 라우팅
- java
- 자바
- lambda
- .NET
- 프로그래머스
- 개발자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |