Java 8

[Spring] 트랜잭션 Transaction /Spring @Transactional 사용법

이제야 정리하는 트랜잭션! Java Spring에서 트랜잭션을 어떻게 사용하는지 정리해보았다. 글을 쓰면서 @Transaction의 사용 위치, 격리성 문제 등 더 알아가야 할 내용이 많이 보여 다른 포스팅으로 돌아와야할 것 같다. 사실 테스트 코드에 트랜잭션을 적용해보고싶어서 방법을 찾던 와중에 이에 대한 많은 고민과 의견들이 있길래 흥미롭게 이것 저것 찾아보고 정리해보려고 했는데, 이해가 잘 가지 않아 힘들었다. 트랜잭션 자체에 대해서 아무것도 모르니 일단 기초부터 공부해보자!! 트랜잭션애플리케이션에서 어떤 기능이 동작할 때 여러 개의 쿼리가 실행될 수 있다. 이 경우 모든 쿼리가 다 에러 없이 실행되어야 그 기능이 정상동작했다고 말할 수 있다. 트랜잭션은 트랜잭션 범위에서 실행된 모든 쿼리가 다 에..

Java 2025.02.03

[JAVA] String Constant Pool

String constant poolJava에서 문자열 리터럴을 저장하는 독립된 공간 String 객체에 값을 할당하는 방법은 두 가지가 있습니다.리터럴 대입new 키워드 사용하여 대입 String str1 = "hello"; String str2 = new String("hello"); String str3 = "hello"; String str4 = new String("hello"); System.out.println(str1==str2); //false System.out.println(str1==str3); //true System.out.println(str2==str4); //falsestr1, str3은 리터럴을 바로 대입했고 str2, str4는 new 키워드를 사용해 문자열을 대입했습니..

Java 2024.12.31

[JAVA] static 메서드에서 non-static 멤버에 접근

static 메서드는 같은 클래스의 non-static 멤버에 접근할 수 없다. 그 이유는 뭘까?non-static vs staticnon-static 멤버는 인스턴스 변수이다. 객체가 생성될 때마다 각기 다른 값을 갖는다.static 멤버는 클래스 변수이다. 클래스가 메모리에 로드될 때 단 한 번만 수행되고 모든 객체가 이 값을 공유한다.왜 static 메서드에서 non-static 접근이 안 되는가import java.io.*;class Person{ private String name; public Person(String name){ this.name = name; } static String get(){ return name; //static 함수는..

Java 2024.12.24

[Java] 예외 처리

오류(Error)의 종류오류는 세 가지 종류로 나뉘어진다.구문 오류(컴파일 에러)문법에 맞지 않거나, 오타가 발생했을 때 컴파일러가 알려주는 오류이다. 치명적인 오류는 아니다.논리 오류컴파일/실행은 되지만 프로그램이 잘못 동작하고 있는 오류이다.프로그램이 작동하는데는 아무 문제가 없지만, 실행 결과가 개발자가 의도한 바와 다른 경우이다.예를 들어 점수의 평균을 계산하는 메서드에서 총 과목의 수가 3인데 4로 나누도록 만들었다면 논리적 오류에 해당한다. 이 경우 로직이 틀린 것이기 때문에 개발자가 코드를 짰지만 의도한 대로 프로그램이 동작하지 않게 되며, 컴파일/실행했을 때는 정상 동작하므로 쉽게 찾기가 힘들다.실행 오류(런타임 에러)프로그램 실행(런타임) 도중에 어떤 특정 컴퓨터에만, 특정한 상황에만 발..

Java 2024.12.18

[JAVA] Comparable로 객체 정렬하기

객체 정렬은 Kruskal로 MST를 구할 때 자주 쓰이는 문법이다.엣지의 가중치를 오름차순으로 정렬한 후 엣지를 앞에서부터 선택하면 MST를 만들 수 있기 때문이다. 그런데 compareTo의 리턴값을 어떻게 설정해야 객체가 오름차순 또는 내림차순으로 정렬되는지 매번 헷갈려서 간단히 정리하고 넘어가려고 한다. 객체를 정렬하는 방법?정렬하고자하는 객체들을 리스트에 넣어 Arrays.sort()를 호출하면 된다. Arrays.sort() 호출 시 Comparable 인터페이스의 compareTo() 메서드가 호출된다. compareTo() 메서드는 두 객체를 특정 기준으로 비교하여 int값을 리턴하는 함수인데, compareTo()에 의해 양수가 리턴되면 두 객체의 자리를 바꾸는 식으로 정렬이 이루어진다...

Java 2024.12.17

[JAVA] 다형성이란? 다형성이 필요한 이유 | 오버라이딩, 오버로딩, 타입 변환(업캐스팅)

다형성은 무엇이고, 왜 필요할까요? 다형성은 객체 지향적 설계를 위한 4가지 원리 중 하나입니다.여기서 알 수 있듯이 다형성의 목적은 객체 지향의 실현입니다. 다형성이 어떻게 객체 지향을 실현하는지 살펴봅시다. 다형성이란?다형성은 어떤 객체의 속성이나 기능이 상황에 따라 다른 역할을 수행할 수 있는 것을 의미합니다.다형성은 오버라이딩, 오버로딩, 타입 변환 등에서 다양하게 나타날 수 있는데요, 하나씩 설명해보겠습니다. (1) 오버라이딩상위 클래스 메서드를 하위클래스에서 재정의하여 사용public interface Vehicle { //Vehicle 인터페이스 void start(); void moveForward(); void moveBackward();}public class Car i..

Java 2024.12.17

[JAVA] String과 StringBuffer/StringBuilder

지금까지 코테 문제를 풀면서 StringBuffer을 사용한 이유는 그 순간에 StringBuffer을 사용하는 것이 성능에 도움이 될 것이라 판단했기 때문이라기보다는, 그저 append기능을 쓰기 위해서였습니다.그리고 문자열 연산 시 String의 문자열 합치기 기능보다 더 성능이 낫다고 들어서 정도의 이유였죠..또 StringBuffer보다 StringBuilder가 단일 스레드 연산에 더 효율적이라는 글을 읽은 뒤로는 StringBuilder을 열심히 썼어요. 과연 그 말이 항상 옳을까요? 그리고 셋의 차이점은 무엇일까요? String과 StringBuffer/StringBuilder은 모두 문자열을 다루는 클래스입니다.이중 어느 것을 사용하는 게 성능이 좋을지는 각 클래스의 특징을 알아야 판단할 ..

Java 2024.12.15