Java 30

Spring @어노테이션

Spring 프레임워크에서 쓰이는 어노테이션을 정리해보았다. @RequiredArgsConstructorfinal이 붙은 필드로 생성자를 하나 만들어준다.그리고 생성자가 하나만 있으면 @Autowired가 자동으로 붙는다.그래서 생성자와 @Autowired를 생략하여 코드를 깔끔하게 정리할 수 있다. @Transactional데이터베이스 상태를 바꾸는 쿼리들이 많이 있을 때, 중간에 오류가 나서 멈추게 되면 그동안 바꿨던 쿼리들을 되돌려야 할 것이다. 트랜잭션을 사용한 메소드는 쿼리들을 프록시 저장했다가 최종적으로 완료되면 커밋된다. 트랜잭션에 대해서 간단히 설명했지만 다루는 내용이 많다. 나중에 별도로 게시물을 만들어보겠다.   스프링 IoC(Inversion of Control) 관련 어노테이션스프링..

Java/Spring 2024.07.28

Spring - 스프링 빈

스프링 빈은 어디에 활용하는 것일까?객체지향언어를 배우다보면 싱글톤 객체를 만들어 필요한 곳마다 찾아넣어주는 의존성 주입을 구현해본 적이 있을것이다.이것을 간단화할 수 있는 @Autowired에 활용된다.생성자에 @Autowired 어노테이션이 있다면 스프링이 연관된 객체는 스프링 Container가 찾아서 넣어준다.  스프링 빈을 등록하는 방법컴포넌트 스캔과 자동 의존관계 설정자바 코드로 직접 스프링 빈 등록하기스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 싱글톤으로 등록한다. 즉, 스프링 빈을 의존성 주입 받으면 모두 같은 인스턴스이다. 설정으로 싱글톤이 아니게 할 수 있지만 대부분 기본값인 싱글톤을 사용한다.  1. 컴포넌트 스캔@Component 어노테이션이 있다면 스프링 빈으로 자동 등록되는..

Java/Spring 2024.07.23

인텔리제이 단축키(Java)

자동 import (alt + enter) 줄 복사 (ctrl + D) 반환타입, 이름 자동 생성 (ctrl + alt + V) 메소드 추출 (ctrl + alt + M) 메소드 내의 값들을 파라미터화 할 것인지도 물어본다. 파라미터 자동 생성 (ctrl + alt + P) 생성자, getter, setter, toString() 등 자동 생성 (alt + insert) Test 클래스 자동 생성 (ctrl + shift + T) 이름 동시 변경 (shift + F6)  이전에 찾아봤던 페이지 찾기 (ctrl + E)  변수를 반환 값으로 변환 (ctrl + alt + N)   파일 전체 제목 검색 (ctrl + N)  파일 전체 내용 검색 (Ctrl + Shift + F)  선택부분 파라미터 추가 (C..

Java 2024.07.23

정적 바인딩 & 동적 바인딩

바인딩이란?프로그램의 변수나 함수 호출이 실제 메모리 주소와 연결되는 과정을 말한다.  정적(static) vs 동적(dynamic)정적(static)이란 한번 정해놓으면 변하지 않고 계속해서 유지되는 성질을 말하며,동적(dynamic)이란 상황에 따라서 실시간으로 변하는 성질을 말한다. 이러한 정의는 정적 바인딩과 동적 바인딩의 역할을 함축적으로 나타낸다.정적 바인딩, 동적 바인딩은 값이 확정되는 시점에 따라 나뉜다. 컴파일 시점에 바인딩이 일어나면 정적 바인딩,런타임 시점에 바인딩이 일어나면 동적 바인딩이다. 컴파일과 런타임에 대해서 간단하게 알아보고 가자.컴파일 : Java의 소스코드를 바이트코드로 변환하는 과정런타임 : 프로그램이 실행되는 동안의 상태 Java의 JVM은 바이트코드를 읽어들여 파일..

Java 2024.07.17

다중 상속

다중 상속이란?한 클래스가 두 개 이상의 부모 클래스로부터 특성을 상속받는 개념이다.Java에서는 클래스의 다중 상속을 직접적으로 지원하지는 않지만 인터페이스를 통해 유사한 효과를 낼 수 있다.  장점코드 재사용성 증가다양한 부모 클래스의 특성을 조합 가능단점다이아몬드 상속 문제: 같은 메소드가 여러 부모 클래스에 존재할 때 발생하는 모호성이 존재한다복잡성 증가: 클래스 계층 구조가 복잡해질 수 있다.  Java에서의 인터페이스를 통한 다중 상속 구현: 여러 인터페이스에서 같은 시그니처의 디폴트 메소드가 있을 경우 충돌이 발생할 수 있다.이럴 경우 메소드를 명시적으로 선택해줘야한다.interface Interface1 { default void commonMethod() { System..

Java 2024.07.17

static 메소드 vs 인스턴스 메소드

static 메소드와 인스턴스 메소드 항상 사용만 했었는데 왜 그런지는 생각해 본 적이 없었다. 그래서 사용하는 이유에 대해 정리할 필요가 있다고 느껴져 게시물을 작성하게 되었다. static 메소드static 메소드의 예시public class MathUtils { // static 메소드: 원의 면적 계산 public static double calculateCircleArea(double radius) { return Math.PI * radius * radius; } // static 메소드: 섭씨를 화씨로 변환 public static double celsiusToFahrenheit(double celsius) { return (celsius ..

Java 2024.07.17

이펙티브 자바 - Item(1) 생성자 대신 정적 팩터리 메소드를 고려하라

*정적 팩토리 메소드의 예시public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}  장점 1. 이름을 가질 수 있다. 자바 class는 파라미터마다 다른 생성자를 가질 수 있는 특성(오버로딩)을 가지고 있는데 생성자 이름만으로는 각 생성자의 특성을 대표하기 어려운 경우가 많다. 그럴 때 위의 예시처럼 public static 팩터리 메소드를 사용하면 각 생성자의 특성을 잘 설명할 수 있다.  장점 2. 같은 타입의 파라미터를 받는 다수의 생성자를 만들 수 있다.public Food(String name) {...}public Food(String ingredient) {...}  위의 예시는 불가하..

Java 2024.07.15

Java CS 대비 정리(자료형, JVM, JRE, JDK)

운영체제 및 프로그램운영체제: 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음 프로그램: 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위해 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어  컴퓨터의 자료표현bit: binary digit의 약자0과 1을 표현할 수 있는 상자 한개 byte: 1byte = 8bit정보를 처리하기 위한 최소 단위2^8 = 256개의 표현 가능 비트bit0/1바이트Byte8 bit킬로바이트KB2^10 Byte메가바이트MB2^20 Byte기가바이트GB2^30 Byte테라바이트TB2^40 Byte 음수, 양수 범위127 ~ 0 양수-1 ~ -128 음수 보수보충해주는 수, 어떤 수를 만드릭 위해 필요한 수보수가 필요한 ..

Java 2024.06.05

ddl-auto: create 적용 안되는 문제

auto-increment로 id를 설정해두다 보니 테스트 도중 id가 밀려 초기화를 해야할 일이 생겼다.그래서 yml 파일의 ddl-auto를 update에서 create로 바꾸고 실행시켜봤는데...일부 테이블만 초기화 되어있고 나머지는 초기화가 안되는 현상이 발생했다. 이전에 만들어두고 현재는 사용하지 않는 테이블을 삭제안하고 create 했던 것이 문제였다. 이 테이블과 연관관계를 갖는 테이블들 전부 초기화가 안되고 있던 것이다. 그래서 이 테이블을 직접 DROP하고 다시 실행해보니 오류는 말끔히 해결되었다!

Java/JPA 2024.02.04