오랜만의 일기. 쓸 겨를이 없었다. 수요일에 최종면접을 본다.. 하루하루 입맛이 없고 쉴 때도 괜히 마음이 찔린다. 그냥 마음 비우고 봐야지.. 객체지향 프로그래밍이란 💡 시스템을 상태와 행위를 가진 객체들의 공동체로 보고, 객체들 간의 협력으로 로직을 구성하는 프로그래밍 방법. 장점 코드 재사용성이 높다. 누군가 만들어놓은 클래스를 재사용하거나 상속하여 확장한다. 유지보수가 쉽다. 수정할 부분이 클래스 내의 멤버 변수나 메서드로 존재하여 해당 부분만 수정하면 된다. 대형 프로젝트에 적합하다. 클래스 단위로 모듈화하거나 인터페이스로 … 업무분담하기 쉽다. 단점 처리 속도가 상대적으로 느리다. 객체가 많으면 용량이 커진다. 설계 시 많은 시간과 노력이 필요하다. 객체지향의 특징 추상화 불필요한 정보는 숨기..
Til
람다 서버를 준비하거나 관리하지 않아도 코드를 실행할 수 있는 컴퓨팅 서비스. 서버리스 서비스다. 람다를 사용하면 필요할 때만 함수를 실행하고 자동 확장된다. 또한 사용한 만큼 비용을 지불한다. 람다는 AWS가 직접 서버에 관한 것들은 관리를 해주기 떄문에 (VPC도 관리할 필요 없다.) 개발자는 자신의 코드만 관리해주면 된다. 내 주식앱은 람다를 사용하고 있는데 이유는 다음과 같다. 우선 내가 앱과 서버 모두를 관리해야 하기에는 작업량이 너무 많았고, 크롤링 같이 단발성의 작업에 상시 서버를 켜두는 것보다 사용한 만큼만 지불하는 것이 더욱 비용효율적이며, 스케일링도 자동으로 해주어 요청에 탄력적으로 대응할 수 있었다. 제일 컸던 것은 일정량까지는 무료다. 그래서 슬퍼해야할지, 기뻐해야할지 모르겠지만 아..
스프링 라이브러리 중에는 검증을 담당하는 validation 라이브러리가 있다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } build.gradle 에 이렇게 작성하면 사용할 수 있다. 이번 익명 게시판 API 만들기 과제에서 게시글의 필드값을 검증해야 했어서 이를 사용해봤다. import org.hibernate.validator.constraints.Length; import jakarta.validation.constraints.NotBlank; import lombok.Getter; /** * 게시글 생성 요청 DTO * 생성되기 전 암호화된 비밀번호로 변경이 필요 */ @Gette..
멱등성(idempotent) 전산학이나 수학에서 사용하는 용어, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 (연산을 여러 번 반복하여도 한 번만 수행된 것과 같은 성질) f(f(x)) = f(x) 보통 이렇게 표현이 되곤 한다. 일단 한번 연산하면, 이후 몇 번을 연산해도 같은 결과가 나온다. 멱등 연산은 작업 수행 요청이 최소 한 번 발생하도록 보장되지만 두 번 이상 발생할 수도 있는 네트워크 프로토콜 설계에 자주 사용된다. 작업이 멱등적이면 작업을 두 번 이상 수행해도 결과는 한 번만 수행된 것과 동일하기 때문에 문제가 없기 때문이다. 멱등은 RESTful 웹 서비스의 맥락에서 많이 언급된다. REST는 웹 애플리케이션을 리소스로 구성한 다음 POST, PUT, GET 및 DELETE 등..
주제 Http method 중 PUT 과 PATCH 의 차이가 뭘까 Http method 중 자원의 수정을 의미하는 메서드로는 PUT 과 PATCH 가 있다. 한 개만 있어도 될 것 같은데 왜 2개지?? 하는 의문으로 알아보았다. RFC 문서를 직접 찾아봤다. PUT은 자원을 대체(replace) 한다. 즉, 없으면 생성하고 있으면 기존 값을 버리고 요청값으로 바꾼다. (튜터님은 보통 프로젝트에선 성공 응답은 전부 200 OK 로 통일한다고 하고, 나도 이 방법이 더 좋다고 생각하지만 일단의 표준은) PUT 요청시 자원이 없다면 POST와 같이 새로 생성 후, 201 Created 를 응답한다. 자원이 있다면, 기존 자원을 대체 후 200 OK 나 204 NO CONTENT 를 응답한다. PUT 메서드를..
문제 String.isEmpty(), String.isBlank() 의 차이점 역시.. ㅈㅎ님 코드리뷰 하다가 발견한 것들 적어본다. 코드리뷰할 때마다 TIL 쓸 것들이 쏟아진다. String 객체의 메서드 중에는 문자열이 비었는지 체크하는 메서드인 isEmpty() 와 메서드의 공백까지 체크해서 비었는지 확인하는 isBlank() 메서드가 있다. 코드리뷰를 하던 중 isEmpty() || isBlank() 를 함께 사용한 부분이 있어서 역시 리뷰의 근거?를 마련하고자 적어본다. 먼저 isEmpty() 메서드는 JAVA 6 에 추가된 메서드고, 문자열의 길이가 0일 경우 true를 반환한다. /** * Returns {@code true} if, and only if, {@link #length()} i..
문제 String.matches(regex) 는 왜 반복사용시 Pattern.matcher(string).matches() 보다 느릴까 깃허브에서 추천을 타고타고 보다보면 다른 사람들이 코드리뷰 해놓은 것들도 볼 수 있는데, 그중에 종종 보이는게 String.matches는 느려서 Pattern 을 static 으로 해두고 써야해요! 라는 내용이 있다. ㅈㅎ님 코드리뷰를 하던 중에 마침 String.matches 를 써둔 게 있길래 리뷰의 근거를 마련하기 위해? 얼마나 느린지, 왜 느린지를 정리해보려고 한다. private static final Pattern PATTERN = Pattern.compile(".*[0-9].*"); static Function validateNumberWithPattern..
문제 지급된 강의를 듣는 중, 왼쪽과 같이 MAJOR - STUDENT 테이블 간의 참조 화살표가 생겨야 하는데 오른쪽처럼 생기지 않는 문제가 있었다. CREATE TABLE IF NOT EXISTS MAJOR ( major_code varchar(100) primary key comment '주특기코드', major_name varchar(100) not null comment '주특기명', tutor_name varchar(100) not null comment '튜터' ); CREATE TABLE IF NOT EXISTS STUDENT ( student_code varchar(100) primary key comment '수강생코드', name varchar(100) not null comment ..
문제String.repeat 은 왜 빠르고 StringBuilder.append 는 왜 느린가 오늘 ㅈㅎ님에게 코드 리뷰를 부탁받아서 보던 중에 인텔리제이의 요상한 추천을 받게 된다. public String getBar(int len) { StringBuilder sb = new StringBuilder(); for (int i = 0; i String.repeat()으로 바꿀 수 있다고 추천하는거다. 바꾼 코드는 다음과 같다. public String getBar(int len) { return "-".repeat(len);} 문득, 둘 사이의 성능차이가 어느정도 날지가 궁금해졌다. 그래서 다음과 같이 테스트를 구상해봤다. public class StringTest { stati..