전체 글 47

[Java] 고유락(Intrinsic Lock)과 동기화(synchronization)

동기화란? 멀티 스레드 환경에서는, 공유된 자원(변수나 객체 등)에 대해 여러 스레드가 동시에 접근하면서 예상치 못한 결과가 발생할 수 있다. 예시를 통해 알아보자 // Runnable을 구현해서 스레드 정의 public class RunnableThread implements Runnable{ private final Number number; public RunnableThread(Number number) { this.number = number; } @Override public void run() { number.updateNum(); System.out.println("update End"); } } // 공유된 자원 public class Number { private long num = 0..

Java 2024.03.03

[Java] Thread

스레드에 대해 공부하기 전에, 프로세스(Process)와 스레드(Thread)는 프로그램의 실행과 동작을 통해 설명할 수 있기에, 프로그램의 실행에 대해 먼저 알아보자 Program의 실행 프로그램(Program)과 프로세스(Process)는 둘 다 어떠한 목적을 위해 처리 방법과 순서를 기술한 코드의 집합체를 말하는데, 다만 프로그램은 저장 장치에 저장된 '정적'인 상태를 말하고, 프로세스는 실행을 위해 메모리 공간에 올라와있는 '동적'인 상태를 의미한다. 즉, 프로그램과 프로세스는 똑같은 프로그램을 말하지만, 상태만 다르다는 의미이다. 다시 프로그램의 실행으로 넘어가보자. 우리는 특정 프로그램을 실행시키기 위해 컴퓨터에 저장하고 설치한다. 이후에 프로그램(Program)을 실행시키면 OS에서 그 프로..

Java 2024.02.25

[Java] Casting (업캐스팅 & 다운캐스팅)

Java에서 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 'Casting(형변환)' 이라고 한다. 주로 primitive 타입과 reference 타입에서 값을 대입하거나 연산을 위해 캐스팅이 발생한다. 업캐스팅 & 다운캐스팅 상속 관계에 있는 부모 클래스(Super Class)와 자식 클래스(Sub Class)간에도 캐스팅이 가능하다. 부모 클래스를 자식 클래스로 캐스팅 하는것을 DownCasting, 자식 클래스를 부모 클래스로 캐스팅 하는것을 UpCasting이라 한다. (단, 형제 클래스 끼리는 캐스팅이 불가능) 업캐스팅(UpCasting) 자식 클래스를 부모 클래스로 캐스팅 하는 것 캐스팅 연산자 괄호를 생략할 수 있다 ex) 아래의 두 방법 모두 사용 가능 Parent p = (Parent..

Java 2024.02.18

[Java] Object 클래스와 메서드

// Object.class - java17 Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Object 클래스는, 클래스 계층 구조의 루트입니다. 모든 클래스는 Object.class를 Super 클래스로 가지고 있습니다. 배열을 포함한 모든 개체는 이 클래스의 메서드를 구현합니다. Java에서 'Object' 클래스는 클래스 계층 구조의 최상위 클래스이자 모든 클래스의 부모 클래스이므로, 모든 클래스는 'Object' 클래스를 직간접적으로 상속받는다. Object Clas..

Java 2024.02.18

[Java] 문자열 클래스

String Class String 클래스의 구조 String은 문자열을 내부적으로 byte[]로 저장한다. JDK 9 이전에는 char[], JDK 9부터는 메모리 효율성을 위해 byte[]로 저장하게 되었다 // String.class (Java 8) public final class String implements ... { private final char[] value; ... // String.class (Java 11) public final class String implements ... { private final byte[] value; ... String은 final한 클래스로서 상속(확장)이 불가능하고, 문자열을 저장하는 배열 또한 final로 저장되어있어 변경이 불가능하다. 따라..

Java 2024.02.03

[Java] 직렬화 (Serialization)

직렬화(Serialization)란, Java에서 사용되는 Object(객체)나 Data를 다른 환경의 Java에서도 사용할 수 있도록 Byte 형태로 변환하는 기술을 말한다. 객체를 잘 생각해 보면 Reference Type이기에, 각각 다른 VMS(Virtual Memory Space)를 가진 OS 환경에서는 주소값이 달라지기 때문에 Reference Type의 인스턴스를 전달할 수 없다. 따라서 주소값이 아닌 Primitive Type의 데이터를 넘긴 후 파싱하여 사용해야 한다. 이때 데이터를 넘기기 전에 사용되는 방법이 Reference Type의 데이터를 Byte 형태의 객체 데이터로 변환하는 '직렬화'이다. 직렬화(Serialization) & 역직렬화(Deserialization) 자바의 직..

Java 2024.02.03

[application.yml] 외부포트 / 내부포트 연결하기

** 컨테이너 실행 상태: docker run --port 외부포트:내부포트 Spring에서 application.yml 설정 'ec2 url'을 사용해서 연결하는 경우 외부포트를 사용해서 연결하는 것과 같다 == 외부포트로 연결해야한다 'container name'을 사용해서 연결하는 경우 내부포트를 사용해서 연결하는 것과 같다 == 내부포트로 연결해야한다

[Java] Auto Boxing & Auto UnBoxing

오토박싱과 오토언박싱은 Java 1.5 version에 도입된 기능으로, Primitive Type과 Wrapper Class를 자동으로 변환시켜주는 것을 말한다. 오토 박싱, 언박싱을 알아보기 전에 Primitive Type과 그에 대응하는 Wrapper Class를 알아보자 Primitive Type & Wrapper Class Wrapper Class는 OOP인 Java에서 객체처럼 사용할 수 없는 primitive type을 객체로 표현하기 위해 도입되었다. 이를 통해 원시형에 null을 할당하거나 컬렉션을 활용하는 등, 다양한 객체의 특성을 적용시킬 수 있게 되었다. Primitive Type & Wrapper Class 차이 원시형(Primitive Type) 래퍼 클래스(Wrapper Cla..

Java 2024.01.25

[Java] 자바의 자료형

Java에는 다양한 데이터 종류가 있고, 이는 원시형(primitive type)과 참조형(reference type)으로 나뉜다. 원시형과 참조형 데이터는 어떤게 존재하는지와, 각 데이터의 특징을 알아보자 원시 자료형 (Primitive Type) Primitive Type 특징 종류 Java에는 총 8가지의 원시 자료형이 존재한다 (boolean, char, long, int, short, byte, double, float) 쓰임 데이터를 저장하기 위해 사용되는 자료형을 의미한다 크기 1 byte ~ 8 byte까지 존재 데이터를 다루는 최소 단위가 1 byte이므로, 이보다 더 작을 수는 없다 사용 사용하기 전에 반드시 선언(declared) & 초기화(initialized)를 하고 사용해야한다 ..

Java 2024.01.24

[Java] Call by Value vs Call by Reference

Call by Value? Call by Reference? 그게 뭔데? Call by Value와 Call by Reference는, 메서드를 호출할 때 파라미터를 전달하는 방법을 말한다. Call by Value 메서드를 호출할 때 전달되는 파라미터로 "값"을 넘겨준다. 이러한 이유로 "Pass by Value" 라고도 불린다 호출하는 호출자(Caller)의 변수 "값"을 복사하여, 수신하는 수신자(Callee)의 파라미터로 넘겨준다 메서드를 호출하는 쪽(호출자)의 변수와 호출 당하는 쪽(수신자)의 파라미터는 같은 "값"이지만, 주소가 다른 서로 다른 변수이다 복사되어 넘어간 파라미터는, 호출 함수 안에서 지역적으로 사용되는 지역변수이다 오직 "값" 만을 전달하기 때문에, 호출자와 수신자 어느 한쪽에..

Java 2024.01.20