Programming/Java 21

Main 메서드보다 먼저 실행되는 static 블록 | 토막글

static block은 static 변수에 대한 초기화를 진행할 수 있다: public class hello { static int a; static { a = 500; System.out.println(a); } public static void main(String[] args) { System.out.println("Hello"); } } 클래스 필드와 클래스 메서드는 실행이 가능하도록 올라가고, static 블록의 코드가 실행되어 그 값을 초기화한다. 그 다음 JVM은 메인 메서드를 찾아 실행한다: static하므로 객체를 생성하지 않고도 실행할 수 있다. 따라서: a값을 출력 후, "Hello"

Programming/Java 2023.11.27

자바 파일의 실행과정 - 초급

이번에는 자바 프로그램의 실행에 대한 전체적인 개념만 잡고 넘어가는 것으로 하고, JVM에 대해서는 참고자료의 아티클을 통해 조금 더 자세하게 정리해보도록 하자. 1. .java 파일의 컴파일: .class 파일 javac vendingMachine.java javac vendingMachineMain.java → vendingMachine.java, vendingMachine.class / vendingMachineMain.java, vendingMachineMain.class 파일 생성 Class 파일은 바이트코드로 이루어져 있으며, 바이트코드는 플랫폼 독립적이므로, 플랫폼에 관계없이 일정하게 번역된다. 바이트코드는 바이너리 코드로 되어있지만, 소프트웨어 단에서 해석이 가능하므로 기계어보다는 추상화되..

Programming/Java 2023.11.24

Expression vs. Statement

표현식 Expression 값이거나 값을 반환하는 코드 조각. 변수, 연산자, 리터럴, 메서드 호출로 구성된다. int score; score = 90; 에서, score = 90은 int를 반환하는 표현식이다. 또 다른 예로, # 1 Double a = 2.2, b = 3.4, result; result = a + b - 3.4; # 2 number1 == number2; # 3 "Number1 is bigger than Number2"; #1. a+b-3.4은 표현식이고 #2. 은 boolean을 반환하는 표현식, #3. 은 문자열 표현식이다. 문장 Statement 작업을 수행하도록 설계된 표현식과 문장의 집합(complete unit of execution). 표현식에 세미콜론(;)을 추가함으로써..

Programming/Java 2023.11.23

자바에서의 객체 관리 1: 인자 전달

데이터를 주고받는 데에는 값으로 전달(Call by value), 포인터로 전달(Call by pointer), reference로 전달(Call by reference)이 존재한다. C 언어에서는 값으로 전달하거나 포인터로 주고받는 방식을 구현할 수 있다. 또한 C++에서는(추가로) 참조 자료형을 int&, double&과 같이 기본 자료형에 &를 붙여서 참조 자료형으로 사용할 수도 있다. 자바에서는 모든 것이 객체이므로(객체 지향 언어는 객체간의 상호작용을 중시한다.) 이 객체를 모조리 복사해서 전달하는 것은 비효율적이다. 따라서 기본적으로 메서드에 인자를 전달하거나 리턴 값을 받을 때에 대부분 reference로 전달하는 방식으로 인자가 전달된다. 자바에서 메서드를 호출할 때 매개변수로 지정한 값을..

Programming/Java 2023.11.22

Java의 Switch: 14 이후 추가된 기능

들어가기 전에 JDK 14에 들어서면서 Switch Expression이라는 표현이 추가되었다. Switch Statement는 전통적인 switch 구문으로, 여러가지 경우를 검사하고 지시를 수행하는 동작을 수행한다. 값을 반환하지 않고 주로 프로그램의 흐름을 제어한다. 반면 14에서 추가된 switch expression은 각 case 값을 반환하며, 이 값을 변수에 할당할 수 있다: Expression과 statement의 차이점은 다른 문서에서 살펴보자. 1. Arrow Labels 원래 java의 switch는 case문의 종료를 break를 통해서 진행했어야 했다: switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println..

Programming/Java 2023.11.22

Static

코드를 작성하다 (바보같이) 간과하고 넘어갔던 부분에 대해 궁금증이 생겨서 조금씩 공부해보기로 했다. of 메서드를 static으로 사용하는 이유는? 둘 다 비슷한 용도로 사용하는데, toEntity 메서드와 달리 of 메서드는 static으로 되어 있다. @Getter @Builder @ToString @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor public class RoadmapViewportDto { private BigDecimal x; private BigDecimal y; private BigDecimal zoom; public RoadmapViewport toEntity() { return RoadmapViewp..

Programming/Java 2023.10.17

01 | 기본 문법 | 변수와 리터럴

키워드(keyword) Java 언어에서 정한 예약어 변수명 하나 이상의 글자 첫번째 글자는 문자, '$', '_' 그 이후 글자는 문자, '$', '_', 숫자 길이 제한 없음 키워드는 변수명으로 사용할 수 없음 Primitive Type 기본형 타입은 모두 정해진 메모리 크기를 가지고, 주어진 메모리 안에 그 값을 저장한다. 예: int 정수 하나를 저장하기 위해 메모리에 4 byte가 필요. int i = 1; 메모리 4 byte를 i로 칭하고 정수를 저장한다는 뜻이다. 정수 리터럴(literal) 1을 i 라는 메모리 공간에 저장한 것이다. Literal이란 변수에 입력되는 값 자체. 이 4byte메모리에 숫자 1이 2진수로 저장된다. short: 2 byte, long: 8 byte float,..

Programming/Java 2023.10.04