전체 글 169

[ React ] - 훅(Hook) 종류와 사용법 ( useCallback )

[ React ] - 훅(Hook) 종류와 사용법 ( useCallback ) HTML 삽입 미리보기할 수 없는 소스 useCallback은 함수를 캐싱하고, 재사용할 수 있게 해주는 훅으로, 성능 최적화를 위해 활용됩니다. useCallback은 함수를 매번 새로 생성하는 것을 막아주어 불필요한 렌더링을 줄이고 메모리 사용을 최적화시키는데 도움을 줍니다. useCallback의 경우 상위 컴포넌트에서 정의한 함수를 하위 컴포넌트에 props로 전달하여 사용시 함수를 메모리제이션함으로써, 상위 컴포넌트의 렌더링과 무관하게, 함수가 사용될 때에만 새로 생성되도록 하여 성능을 최적화하는데 도움을 줍니다. 사용법 useCallback은 기본적으로 두 개의 인자를 갖는데, 첫 번째 인자로는 콜백 함수가 들어가며..

Javascript/React 2023.11.22

[ Typescript ] - 제네릭 유틸리티 타입(Generic Utility Types)

제네릭 유틸리티 타입(Generic Utility Types) 타입 조작과 변환을 유연하게 할 수 있도록 타입스크립트에서 제공하는 유틸리티 타입이다. Record Record는 타입스크립트에서 사용되는 제네릭 유틸리티 타입 중의 하나이다. 기본적으로 Record와 같은 형태로 사용되며, 객체의 속성들을 정의할 때 사용한다. Partial T의 모든 속성을 선택적으로 만들어주는 타입으로, T 타입의 각 속성이 선택적으로 처리된다. 아래의 코드를 보면 단순히 User 타입으로 한 user의 경우 name과 email 속성이 정의되지 않아 에러가 발생하고 있지만, Partial타입의 partialUser의 경우 User 타입의 모든 속성이 선택적이 되어 name과 email이 정의되어 있지 않아도 에러가 발..

Typescript 2023.11.21

[ Next.js ] - app router란?

App router란? 기존에 nextjs에서 pages 폴더를 통하여 사이트의 라우팅을 하던 방식과 달리 파일 구조에 따라 사이트의 경로를 설정하는 방식이다. npx create-next-app를 통해 nextjs 어플리케이션 프로젝트를 생성할 경우 기존의 pages router 방식에서는 pages 폴더가 존재했으나 app router 방식에서는 src/app 폴더가 존재하며, 해당 폴더의 하위에 생성되는 폴더와 파일을 기준으로 사이트의 경로가 설정된다. 더불어 src/app 폴더의 하위에 기본적으로 layout.tsx 파일과 page.tsx 파일이 존재하는데, 파일명을 보면 알 수 있듯이 layout.tsx파일은 레이아웃을 정의하는 파일이며, page.tsx 파일은 사용자가 실질적으로 사이트의 루..

Javascript/Next.js 2023.11.19

[ Typescript ] - interface와 type의 차이

interface와 type의 차이 interface와 type 둘 다 타입스크립트에서 타입을 정의하기 위해 사용하며, 유사하지만 다음과 같이 차이를 지닌다. HTML 삽입 미리보기할 수 없는 소스 interface는 주로 구조적인 타입을 정의할 때 사용한다. interface의 선언 interface [interface명] { } ex) interface Person {} interface는 또한아래와 같이 동일한 명칭을 가진 interface를 여러 개 구현하는 것이 가능하며, 이때 해당 interface를 타입으로 선언하여 사용할 경우, 해당 interface 명칭을 가진 속성을 모두 포함하게 된다. interface Person { name: string; } interface Person { a..

Typescript 2023.11.16

[ JPA ] - Jpa entity 관련 어노테이션

JPA entity 관련 어노테이션 @MappedSuperclass 엔티티 클래스에 공통적으로 사용되는 필드나 상속관계를 정의하기 위해 사용하는 어노테이션이다. @MappedSuperclass를 사용한 클래스를 상속한 자식 클래스에서 슈퍼클래스에 정의된 필드들을 상속받게 된다. 예를 들어 데이터 생성시점, 생성자 등 모든 엔티티 클래스에서 공통적으로 사용될 필요가 있는 필드들을 따로 모아 @MappedSuperclass로 생성 후 하위 엔티티 클래스에서 상속받게 하면 공통적인 필드 등에 대한 중복적인 코드를 줄일 수 있다. import jakarta.persistence.MappedSuperclass; import java.io.Serializable; import java.time.LocalDateTi..

JAVA/JPA 2023.11.03

[ JPA ] - Jpa 기본 사용 방법과 Repository 인터페이스

Jpa 기본 사용 방법과 Repository 인터페이스 1. 의존성 추가 기본적으로 jpa를 사용하기 위해서는 spring-data-jpa를 설치하고, 관련된 설정을 해주어야 하는데,스트링 부트 스타터의 일종인 spring-boot-starter-data-jpa를 의존성 추가해주면 jpa 관련한 라이브러리들과 설정을 해준다. 이와 더불어 데이터베이스와 연결하기 위해 mysql-connector-j를 함께 추가해준다. 즉 build.gradle에 아래와 같이 두 라이브러리를 추가해준다. 그 위에 어노테이션이나 테스트, 스프링 부트 스타터 등은 jpa 사용과 직접적 연관이 있는 것은 아니며, 기본적인 어플리케이션 구성을 위해 필요한 라이브러리들이다. 또한 접속한 데이터베이스 정보를 설정해주어야 하는데, ap..

JAVA/JPA 2023.11.01

[ Java ] - 입출력 하기, 스트림 종류 및 예시 코드

자바 입출력 (I/O) * 스트림 : 자바에서 데이터를 운반하는데 사용되는 연결통로라고 할 수 있다.(데이터를 저장하는 방식인 스트림과는 용어만 같을 뿐 다른 개념이다.) * 스트림은 단방향으로만 이루어지기 때문에 하나의 스트림으로 동시에 입력과 출력 작업을 수행하는 것은 불가능하다. 동시에 처리하기 위해서는 입력 스트림과 출력 스트림이 각각 존재 한다. 스트림의 종류 입출력 대상에 따라 아래와 같은 스트림 종류가 존재한다. 종류 입력 스트림 출력 스트림 파일 메모리 프로세스 오디오 장치 FileInputStream ByteArrayInputStream PipedInputStream AudioInputStream FileOutputStream ByteArrayOutputStream PipedOutputS..

JAVA 2023.10.30

[ JAVA ] - 람다식이란?

람다식이란?Java 8부터 추가된 기능인 람다식은 메서드를 익명함수로 정의할 수 있게 해줍니다. 람다식은 코드를 간결화하고, 객체지향언어인 자바를 통해서 함수형 프로그래밍이 가능하도록 하였습니다. 기본적으로 람다식은 아래와 같은 구문으로 이루어집니다.( 매개변수 ) -> { 수행 코드 }ex) (int a, int b) -> { return a + b; }ex) (int a, int b) -> a + b ;수행 코드가 단일 문장으로 끝나는 경우에는 {} 를 생략하고 바로 반환값을 출력할 수 있다.함수형 인터페이스자바에서의 함수형 프로그래밍에서 또 하나 빼놓을 수 없는 개념이 함수형 인터페이스 입니다. 함수형 인터페이스는 하나의 추상메서드만을 가지는 인터페이스로 함수를 객체처럼 다룰 수 있게 하여 람다식과..

JAVA 2023.10.19

[ Java ] - 프로세스와 쓰레드 - 02)

쓰레드의 동기화 방법 HTML 삽입 미리보기할 수 없는 소스 임계 영역으로 설정하려는 부분에 synchronized를 사용하면 되며, 메서드에 적용할 수 도 있고, 특정 영역으로 축소하여 적용할 수 있습니다. 이때 임계 영역을 너무 넓게 설정하는 경우 프로그램의 성능이 저하될 수 있기 때문에 임계 영역을 최소화하는 것이 좋습니다. synchronized가 붙은 메서드가 호출된 후 해당 작업이 종료되기 이전까지 해당 임계 영역에 다른 쓰레드가 접근하는 것을 허용하지 않습니다. 위의 코드를 아래와 같이 수정할 수 있습니다. public class ThreadEx21 { public static void main(String[] args){ Runnable r = new RunnableEx21(); new T..

JAVA 2023.10.17