개발하면서 깃허브 코드를 참고하다보니 가끔씩 함수의 파라미터에 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://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 해당 문제 조건 각 유저는 한번에 한명 유저만 신고가능 동일 유저 신고는 못하고 자기자신 신고불가. 2 ≤ id_list ≤ 1,000 소문자로만 이루어져있다. 1 ≤ id_list 원소의길이 ≤ 10 1≤ report ≤ 21 {이용자id 신고한id} 로 구분자 스페이스바 1≤k≤200 시간복잡도 최악의 경우 report_id * id_list 해도 O..
https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 해당 문제의 요구사항은 아래와 같다. 모든 사람이 심사를 받는데 걸리는 최소 시간을 구하여라 시간복잡도 조건 1 ≤ 사람 n ≤ 1,000,000,000 1 ≤ times 원소 ≤ 1,000,000,000 1 ≤ times 배열 길이 ≤ 100,000 최악의 경우 n = 1,000,000,000 times = [1000000000] 10억 x 10억 = 100억 ..
에라토스테네스의 체 란? 소수를 판별하는 알고리즘이다. 소수들을 대량으로 빠르고 정확하게 구하는 방법이다. 에라토스테네스의 체 원리 에라토스테네스의 체는 가장 먼저 소수를 판별할 범위만큼 배열을 할당하여, 해당하는 값을 넣어주고, 이후에 하나씩 지워나가는 방법을 이용한다. n*2 는 앞선 2의 배수를 제거하는 과정에서 이미 지워졌다. (n*2는 n의 배수이지만, 2의 배수이기도 하니까) n*3 은 앞선 3의 배수를 제거하는 과정에서 이미 지워졌다. (n*3은 n의 배수이지만, 3의 배수이기도 하니까) n*5 는 앞선 5의 배수를 제거하는 과정에서 이미 지워졌다. (n*5는 n의 배수이지만, 5의 배수이기도 하니까) ... 이처럼 n과 곱해지는 값이 n 이전의 수일때는, 이전 과정에서 이미 지워졌을 것이다..
설명 영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요. 입력 첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다. 출력 첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String input = in.next(); System.out.println(solution(input)); } public static String solution(String str) { char[] cha..
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
- .NET
- 네트워크
- 회고
- 삽질
- ec2
- 라우팅
- 초보
- 스위치
- 개발자
- osi7계층
- java
- 자바
- 회고록
- dto
- tcp
- rds
- 프로토콜
- 계층
- SpringBoot
- 라우터
- 알고리즘
- Docker
- spring
- 3Way Handshake
- Spring Boot
- aws
- s3
- lambda
- 프로그래머스
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |