일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 가비지 컬렉션
- MySQL
- Locking Read
- 동시성 문제
- text
- 스프링
- Synchronized
- java
- CAS
- iterable
- Varchar
- jpa
- Atomic Type
- MVCC
- 동시성
- 가비지 컬렉터
- 자바
- foreach
- 데이터 타입
- gc
- Di
- Lock
- reflection
- 백엔드
- db
- iterator
- Today
- Total
목록Java (16)
과정을 즐기자

프로그래밍 언어를 공부하다보면 Call By Value, Call By Reference 라는 용어가 자주 들립니다. Call By Value는 값을 전달하는 방식이고 Call By Reference는 주소를 전달하는 방식입니다. 그렇다면 자바는 어떤 방식을 사용할까요? 변수를 Primitive type, Reference type으로 나눠 각각 테스트 해보겠습니다. Primitive type @Test @DisplayName("정수를 매개변수로 받아서 Call By Value로 동작하는 지 확인한다") void test1() { // given int a = 10; - 1 int b = 20; - 2 // when inner1(a, b); // then assertThat(a).isEqualTo(10)..
개발을 하다보면 상수를 관리해야할 경우가 있습니다. 상수를 사용하는 곳마다 하드코딩을 하지 않고 따로 클래스를 만들면 효율적으로 관리할 수 있습니다. 그래서 Error 메세지를 관리하는 클래스인 ErrorMessageConstant를 만들어서 사용하고 있었습니다. 하지만 이 방식은 완벽한 싱글톤을 보장하지 못한다는 문제점이 있습니다. Before 먼저 기존에 상수를 관리하던 방식부터 살펴보겠습니다. ErrorMessageConstant public class ErrorMessageConstant { private ErrorMessageConstant() { } public static final String MEMBER_DUPLICATION_MESSAGE = "이미 가입된 회원입니다"; public st..
==, equals, hashcode 비교 == (동일성 비교) 두 객체가 있을 때 == 비교는 두 객체가 완전히 같다는 것이다. 즉 단순히 값뿐만 아니라 주소 값 자체가 같아야 true를 반환한다. equals (동등성 비교), hashcode equals, hashcode는 모든 객체의 부모 클래스인 Object 클래스에 정의되어 있다. public boolean equals(Object obj) { return (this == obj); } 기본적으로 equals는 동일성 비교이다. 동일성 비교가 아니라 동등성 비교가 필요할 때 재정의해서 사용한다. 예를들어 Integer, String 처럼 값을 표현할 때 객체가 같은지 비교하는 것이 아니라 값 자체가 같은 지 비교하고 싶을 때 재정의 한다. Ha..
추상 클래스 추상 클래스는 변수를 가질 수 있다. 일반 메소드, 추상 메소드 둘 다 있을 수 있다. 자식 클래스에서 일반 메소드는 재정의 할 수도 있고 그냥 사용할 수도 있다. 하지만 추상 메소드는 반드시 재정의 해야한다. 단일 상속을 지원한다. 코드로 이러한 특징들을 확인해보자 public abstract class AbstractParent { public int number = 10; // 변수 선언 가능 public void hello() { System.out.println("hello"); // 일반 메소드 구현가능 } public abstract void hi(); // 추상 메소드 사용가능 }public class AbstractChild extends AbstractParent { @Ov..

Call by Value Call by value는 값에 의한 호출이다. 다르게 표현하면 값만 전달한다고 할 수 있다. 따라서 call by value 방식으로 값을 전달받고 수정을 해도 원본 값은 바뀌지 않는다. 값을 전달받으면 스택에 메모리가 할당된다. 서로 같은 메모리가 아님! class CallByValue { @Test void test() { int a = 0; -- (1) int b = 0; -- (1) assertEquals(a, 0); assertEquals(b, 0); addTest(a, b); assertEquals(a, 0); assertEquals(b, 0); } void addTest(int a, int b) { a += 10; b += 10; System.out.println(..
static 변수 static 변수를 사용하는 목적에는 2가지가 있다. 메모리의 효율 공유의 목적 class Counter { static int count = 0; Counter() { count++; System.out.println(this.count); } } public class Sample { public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); } }위와 같은 코드를 생각해보자. static 변수를 사용하면 count를 공유할 수 있다. static 변수가 없었으면 new Counter()로 객체를 생성할 때 count가 1 늘어나지만 공유되지는 않아 계속 만들어도 cou..