본문 바로가기

Java

(21)
자바는 Call by Value이다. Call by Value , Call by Reference 가끔 혼란스럽게 하는 질문이다. 이 질문은 메서드를 호출할 때 인자를 전달하는 방식을 말한다. 기본적으로 자바는 인자를 넘길 때 값 혹은 참조를 복사해서 넘기기 때문에 Call by Reference 가 될 수 없다. 고로 Call by Value이다. 여기서 조금 더 설명을 추가하면 참조를 복사해서 넘기기 때문에 새로운 인스턴스를 할당하게되도 원본은 영향을 받지 않는다. 지역변수 builder 는 changeReference 메서드의 스택 영역이 종료되면서 사리질 뿐이다. 복사본이라지만 원본 참조 값을 들고 있기 때문에 해당 인스턴스에 접근해서 필드를 수정하는 것은 가능한 것이다.
모던 자바 인 액션 - Executor와 쓰레드 풀 Java - executor 포스팅에서는 Java API 문서를 보면서 Executor, 스레드 풀, 테스크에 대한 정리를 해보았는데요. 조금 내용이 부족한 것 같아. 모던 자바 인 액션에 나와있는 내용을 추가로 정리해보도록 하겠습니다. 스레드의 문제 Java 스레드는 직접 운영체제 스레드에 접근합니다. 운영체제 스레드를 만들고 종료하려면 비싼 비용을 지불해야 합니다. 더욱이 운영체제 스레드의 숫자는 제한되어 있는 것이 문제입니다. 운영체제가 지원하는 스레드 수를 초과해 사용하면 자바 애플리케이션이 예상치 못한 방식으로 크래시될 수 있으므로 기존 스레드가 실행되는 상태에서 계속 새로운 스레드를 만드는 상황이 일어나지 않도록 주의해야 한다고 합니다. 그리고 최적의 자바 스레드 개수는 하드웨어 코어의 개수에..
Java - Executor Executor를 이해하기 위해 이해해야 할 몇 가지 개념들이 존재합니다. 이를 먼저 정리한 뒤 Executor를 설명하도록 하겠습니다. 목차 1.Thread 2.Task 3.Executor Thread 프로그래밍 세계에서 클라이언트의 요청을 수행하기 위해서는 누군가 일을 해야합니다. 프로그래밍 세계에서 일(Task)을 하는 누군가를 쓰레드(Thread)라고 합니다. 컴퓨터 공학 서적을 찾아보면 보통 쓰레드를 프로세스 내에서 실행되는 흐름의 단위라고 합니다. 참고로 쓰레드의 어원은 실입니다. 아마도 프로그래밍의 세상에서 일(Task)이란, 코드를 실행하는 것입니다. 추측컨데 위에서 아래로 코드를 읽어내려가는 모습이 마치 실과 같아서 이러한 어원이 생기게 된 것이 아닐까요? :) 하여튼 프로그래밍 세계에서..
모던 자바 인 액션 (1) Stream API의 특징 포스팅에서는 명령형/선언형 프로그래밍의 특징과 Stream API가 가지고 있는 특징을 가볍게 설명합니다. 정리에 앞서 모던 자바 인 액션을 읽으며, 짧은 시간이었지만 Javascript를 공부하면서 느꼈던 경험을 토대로 개인적인 생각을 적어보겠습니다. Java만을 사용하던 나에게 함수를 변수로 할당하고 혹은 또 다른 함수의 인자로 넘길 수 있는 Js는 혼란스러웠습니다. 그렇다. Java에서 메서드는 1급 객체가 아니기 때문에 이런 혼란은 자연스러울지도 모릅니다. Java 진영에서 이런 한계를 극복하기 위해 등장한 것이 함수형 인터페이스이죠. 이것은 아마도? 그리고 책을 살펴보면 함수형 프로그래밍 언어에서 영감을 받아 Java8에서 만들어진 것으로 보입니다. 모던 자바 인 액션의 내용을 인용하면 Stre..
record class는 정말로 불변할까 저는 이전까지 프로젝트를 진행하면서 거진 Java 11을 사용했던 것 같습니다. 그러던 도중에 스프링 부트 3을 사용하게 되면서 강제로 Java 17을 사용하게 되었는데요. record class를 많이 사용했던 것 같습니다. 항상 사용하면서 의문이 들었던 점은 record 클래스의 불변성 보장 여부였습니다. 목차 1. record class는 왜 사용할까 2. record class 어떻게 컴파일될까 3. record class 필드는 불변할까 record class는 왜 사용할까? 개발을 하다보면 반복적인 작업을 할 때가 많습니다. 반복을 줄이기 위해 Lombok 프로젝트, Spring Data Jpa 그리고 인텔리제이 IDE의 도움을 받고 있습니다. 이제는 인텔리제이가 없이 살 수 없는 몸까지 되어..
제네릭이란 무엇일까? 타입의 안정성과 다형성 사실 제네릭에 대해서는 포스팅에서도 몇 번 다루었다. ( 항해99 51일차 TIL1 - 제네릭) 예제가 조금 부실한 것 같아 다시 한 번 다뤄보려고 합니다. 자바는 컴파일 시, 변수의 타입이 결정되는 정적 언어를 의미한다. Hello World 출력도 안해봤던 내게 자바 서적이 주었던 시련 중 하나였다. 도대체 정적 언어라는 말이 나는 도통 이해가 되지 않았다. 언어가 정적이라는게 도대체 무슨 말이지 다른 언어는 자동으로 변경되는건가🤔 이런 생각을 했었다. 그러다가 자바가 너무 어려워서 파이썬 책을 한 권 삿었다. 무엇보다도 타입을 설정하지 않는게 참 편했다. 나는 프로그래밍을 관두었고 오랜 시간이 지나 항해99에서 다시 자바로 프로그래밍 공부를 시작하였고 내가 동적 언어와 정적 언어를 모두 경험해봤다는..
객체 지향 프로그래밍이란 무엇인가? 추상화/다형성/캡슐화, SOILD 객체 지향이 무엇인가요? 라는 질문을 받는다고 생각해보면 참 막막하다. 이러한 기분이 드는 이유는 아무래도 객체 지향이라는 것이 굉장히 방대한 개념여서 그런게 아닐까라는 생각을 한다. 목차 1. 객체 지향 프로그래밍이란? 그런데 왜 사용하는가? 2. 객체 지향 특징 1 (추상화/다형성/캡슐화) 3. 객체 지향 특징 2 (SOILD) 1. 객체 지향 프로그래밍이란? 그런데 왜 사용하는가? 객체 지향 프로그램이란? 프로그램을 여러개의 독립 된 단위, 객체들의 모임으로 파악하고자 하는 프로그래밍 패러다임.각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 왜 사용하는가? OOP는 프로그램을 유연하고 변경이 용이하게 만들기 때문이다. 그래서 대규모 소프트웨어 개발에 많이 사용된다..
Java - 애너테이션 애너테이션이란? 과거 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다고 합니다. 그래서 소스코드의 주석/** ~ */ 에 소스 코드에 ㅈ대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했다고 합니다. @이 붙은 태그들이 있다. 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe 라는 프로그램이 이 정보를 읽어서 문서를 작성하는데 사용한다. 이 기능을 응용하여 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애너테이션이다. 사실 크게 와닿지는 않는다. 그럼 요즘 개발 환경에서 애너테이션을 왜 ..