[Java] call by value, call by reference
·
Language/Java
call by value와 call by reference는 함수 호출 시 매개변수를 전달하는 방식이다. 함수 호출 과정에서 함수의 매개변수가 전달될 때 원본 데이터를 복사하는 것인지, 원본 데이터의 참조를 전달한 것인지를 구분하는데 사용한다. 함수 내부에서 원본 데이터를 변경할 수 있는지의 차이가 있다.call by valuecall by value는 값을 복사해서 함수로 전달하는 방식이다. 함수는 전달받은 값의 복사본을 사용하며 함수 내부에서 값을 변경하더라도 호출한 쪽의 원본 데이터에는 영향을 미치지 않는다.call by referencecall by reference는 값이 저장된 메모리의 주소를 전달하는 방식이다. 함수는 전달받은 주소를 통해 원본 데이터를 직접 참조하기 때문에, 함수 내부에서 ..
리더보드 만들기 - 1
·
프로젝트
최근 css/js로 애니메이션 효과를 넣는게 재미있어서 이것저것 만들어 보다가 리더보드를 만들면 어떨까 생각했다. 처음에는 깔끔한 UI로 구성된 Vue 컴포넌트를 만드려고 했는데 실시간 순위라는 주제가 공부해볼만한 내용인 것 같아 백엔드/프론트엔드 모두 구현해보려고 한다. 일단 어떻게 진행할지 간단히 기획해 봤다.순위가 변하는걸 보여주는 Vue 컴포넌트 구현유저, 점수 데이터를 조회하는 API 구현실시간으로 점수 변동이 반영되도록 Vue 컴포넌트 수정실시간에 대해서는 좀 더 시나리오를 고민해봐야겠다. 점수 변동이 있을 때마다 반영된 데이터를 보여줄지, 일정 시간마다 조회할지에 따라 백엔드 구현이 달라질 것 같다.기술 스택은 Springboot, Vue.js를 사용하고 필요하면 redis를 추가할지도 모른..
[JPA] 연관 관계
·
Spring Framework/Spring
JPA를 사용하면서 두 엔티티간 일다대 관계를 설정하는 경우가 많았다. 어쩔때는 중간 테이블이 생기고 어쩔때는 데이터베이스에 데이터가 저장이 안되고, 그럴때마다 그냥 mappedBy 추가하고 joinColumn 추가하고 넘어갔다. 특히 두 엔티티 관계를 설정할 때 연관관계의 주인이라는 개념을 잘 이해하지 못했다. 아직 제대로 개념을 익히지는 못했지만 두 엔티티 관계 설정을 해보며 어떤 변화가 생기는지 테스트해봤다.기본 코드아래의 Parent, Child 두 엔티티에 일대다 관계를 설정할 것이다. 각 엔티티에 @ManyToOne이나 @OneToMany를 추가해보며 테스트 코드를 실행했다.@Entitypublic class Parent { @Id @GeneratedValue(strategy = G..
[Java] sealed
·
Language/Java
의도하지 않은 클래스가 상속될 경우 예상치 못한 동작이나 버그가 발생, 또는 라이브러리나 공통 클래스에서 상속 제한 필요JDK 17부터 sealed를 도입클래스 계층 구조에 대한 제어를 더욱 강화클래스와 인터페이스가 허용된 하위 유형을 정의할 수 있다.public interface Loan { double calculateInterest();}어떤 클래스든지 Loan을 구현 가능한 상태sealed 인터페이스 정의sealed 인터페이스와 허용하는 하위 클래스를 선언 방법public sealed interface Loan permits HomeLoan, PersonalLoan, AutoLoan { double calculateInterest();}Loan을 sealed로 지정, HomeLoan, ..
[Typescript] hasText
·
Language/JavaScript
타입스크립트에서 StringUtils.hasText를 어떻게 만들까구현하며 알게된 타입스크립트 문법들function hasText (str?: string | null): boolean { return !!str?.trim()}주요 문법Optional Chaining(?.)str이 null 또는 undefined일 경우 바로 undefined를 반환null 또는 undefined이 아니면 trim()을 실행해 양 끝의 공백을 제거한 문자열 반환**!!**부정 연산자 !를 두 번 사용Optional Chaining의 결과로 나온 null, undefined를 boolean타입인 false로 변환trim()으로 만들어진 문자열은빈 문자열("")이라면 false문자를 가진 문자열이면 true기타위에서 구..
[Typescript] User Defined Type Guards
·
Language/JavaScript
vue-core의 코드 분석 중 inject()의 구현부에서 isFunction()이라는 함수를 보게되었다. '함수여부를 어떻게 판별할까?'하고 정의를 찾아보니 아래와 같은 코드가 있었다.export const isFunction = (val: unknown): val is Function => typeof val === 'function'내가 헷갈렸던 부분은 반환 타입으로 주어진 val is Function이었다. 파이썬에서만 봤지 타입스크립트에서 is를 사용하는걸 처음봐서 검색해보니 User Defined Type Guards라는 개념을 찾을 수 있었다.User Defined Type Guards란 특정 조건을 만족하는지 확인하여 컴파일러에게 해당 조건이 참일 경우 변수나 객체의 타입을 안전하게 판..
[Java] StringUtils의 hasLength()와 hasText()
·
Language/Java
프로젝트 진행 중 intellij에서 StringUtils.isEmpty()를 사용하는 곳에 노란색 경고와 hasLength(String)나 hasText(String)를 대신 사용하라는 메시지가 나와서 두 메서드의 차이점을 찾아봤다.StringUtils스프링 프레임워크에서 제공하는 문자열 처리 유틸리티 클래스org.springframework.util 패키지에 포함되어 있으며, 문자열 검사, 변환, 조작, 비교 등의 문자열 처리 관련 메서드를 가진 유틸리티 클래스이다.isEmpty()는 5.3 버전부터 deperecated되기 때문에 hasLength()나 hasText() 사용을 권장한다.두 메서드는 비슷한 역할을 하지만 코드를 보면 차이점이 있다.빈 문자열인지 확인이 필요할 경우 hasText()를..
[프로그래머스] 연속된 부분 수열의 합
·
PS/프로그래머스
링크 문제 설명 def solution(sequence: List[int], k: int) -> List[int]: ... 주어진 비내림차순 배열 sequence에 대해 합이 k인 부분 배열 중 가장 길이가 짧은 구간을 구해 반환한다. 비내림차순 : 인접한 두 수가 같을 수도 있는 오름차순 sequence k result [1, 2, 3, 4, 5] 7 [2, 3] [1, 1, 1, 2, 3, 4, 5] 5 [6, 6] [2, 2, 2, 2, 2] 6 [0, 2] 제한사항 5 ≤ sequence의 길이 ≤ 1,000,000 1 ≤ sequence의 원소 ≤ 1,000 sequence는 비내림차순으로 정렬되어 있습니다. 5 ≤ k ≤ 1,000,000,000 k는 항상 sequence의 부분 수열로 만들 ..