Language Study 29

Java 17: LTS와장기적 사용의 이유

요약 본 글은 Java 17의 도입 이유, 새로운 기능, 그리고 장기적인 사용 가능성을 다룬 HereOtda 개발자 Medium 블로그의 “우리 팀이 JDK 17을 도입한 이유”, Tistory의 kghworks의 “[Java, Spring] 버전 선택 가이드 2024 (Java 21)”, 그리고 Tistory의 aday7이 작성한 “금융권 자바 버전 업그레이드 필요성과 추천: Java 17 도입 전략”이라는 3개의 글을 분석합니다. 이를 통해 Java 17이 LTS(Long-Term Support) 버전으로서 왜 백엔드 개발에 적합한 선택인지 설명하고자 합니다. 성능 향상, 보안 강화, 그리고 새로운 기능들이 Java 17을 선택하는 주요 이유로 제시되며, 이 분석을 통해 많은 기업들이 Java 17을..

Language Study/Java 2024.10.12

[모던 자바 인 액션] 스트림(Stream)

많은 요소를 포함한 커다란 컬렉션 연산 성능을 높이기 위해서는 병렬로 컬렉션 요소를 처리해야한다. 이를 구현하는 것은 단순 반복 처리 코드임에 비해서 복잡하고 어렵다. 따라서, 자바 언어 설계자들은 스트림을 만들었다. 스트림이란 무엇인가? 스트림은 자바 8 API에 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용한다면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.   List lowCaloricDishesName = menu.parallelStream() .filter(d -> d.getCalories()   위와 같이 코드를 작성할 수 있는데, 여기서 filter(sorted, map, collect)..

Language Study/Java 2024.07.25

[모던 자바 인 액션] 람다 표현식

람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다표현 식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.  익명보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다.함수람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. // 기존 코드Comparator byWeight = new Comparator() { public..

Language Study/Java 2024.07.23

[모던 자바 인 액션] 동작 파라미터화 코드 전달하기

동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.  동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 대해 효과적으로 대응할 수 있는데, 코드블럭의 실행은 나중으로 미뤄진다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있고, 결과적으로 코드 블럭에 따라 메서드의 동작이 파라미터화된다.리스트의 모든 요소에 대해서 '어떤 동작'을 수행할 수 있음리스트 관련 작업을 끝낸 다음에 '어떤 다른 동작'을 수행할 수 있음에러가 발생하면 '정해진 어떤 다른 동작'을 수행할 수 있음동작 파라미터로 위와 같은 기능들을 구현할 수 있다.  프레디케이트를 활용하여 선택 조건을 결정하는 인터페이스를 아래와같이 정의할 수 있다.위 조건에 따라 filter 메서드가 다르게 동작할 것이라..

Language Study/Java 2024.07.23

[모던 자바 인 액션] 자바 8,9,10,11: 무슨 일이 일어나고 있는가?

자바가 거듭 변화하는 이유컴퓨팅 환경의 변화자바에 부여되는 시대적 변화 요구자바 8과 자바 9의 새로운 핵심 기능 소개 역사의 흐름은 무엇인가? 자바 역사를 통틀어 가장 큰 변화가 Java 8 에서 일어났다. 물론 이후의 버전에서도 큰 변화가 있었으나, 자바 8만큼 획기적이거나 생산성이 바뀌는 것은 아닐 것이다.  멀티코어 CPU 대중화 같은 하드웨어적인 변화도 영향을 미쳤다. 자바 8 등장 이전에는 스레드를 사용하는 것이 좋다고 그랬겠지만, 자바는 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려고 노력했다. 이전까지는 스레드 풀이나 병렬 실행 컬렉션, 포크/조인 프레임워크를 제공했으나, 쉽지 않았다고 한다.  🍃자바 8에서 새롭게 지원한 기술들스트림 API메서드를 코드에 전달하는..

Language Study/Java 2024.07.23

multi-thread 에서 두 가지 task를 번갈아가도록

공유 객체 여러 개의 스레드가 동일한 객체를 참조 및 공유하고 있을때, 해당 객체를 공유객체 공유 변수 사용하기 💡 ReentrantLock이나 Synchronized키워드 없이 번갈아가려고 하면 ”공유변수” 를 사용하면 된다. Busy Waiting이나 Spinlock과 같은 형태를 포함할 수 있기 때문에 CPU 자원을 비효율적으로 사용할 수도 있다. 또한 코드의 복잡성을 증대시키고, 잘못할 경우 데드락(Deadlock)이나 라이브락(Livelock)과 같은 문제를 일으킬 수 있다. public class WorkObject { private static int counter = 0; private volatile int turn = 1; public void methodA() { for (int i ..

Language Study/Java 2024.03.18

[C/C++] 11 - Command Line Argument

Command Line이란? 컴퓨터의 텍스트 인터페이스 프로그램은 커멘드를 통해서 실행을 위해 컴퓨터 operation system으로 이동한다. Commend Line arguments - parameters that are supplied to the program when it is invoked argc & argv[] int argc // argument count commend line arguments의 char *argc[] // argument vector The array of the pointers to all command line arguments All command line arguments are inputted as character strings argv[0] points..

Language Study/C 2022.12.14

[C/C++] 10 - 04 파일 입출력 기초

Index C 언어의 두 가지 파일 유형 Text File vs Binary File 파일 사용의 개골적 과정과 FILE 구조체 1. C언어의 두가지 파일 유형 Text Mode File vs. Binary Mode File 2. Text File vs Binary File C 언어에서는 파일을 읽거나 쓰기 위해 Open 할 때 대상 파일이 Text File 인지 Binary File 인지 구분하여야 한다. Text File 사람들이 읽을 수 있는 문자로 모든 정보를 표현하고 저장하는 파일 서로 다른 값을 구분하는 구분자가 필요하다 표준 입출력에 문자열을 출력하는 puts(), printf() 등의 함수,입력하는 gets(), scanf()등의 함수에 대응하는 fputs(), fprintf(), fget..

Language Study/C 2022.12.14

[C/C++] 10 - 03 Lifetime 분류

Index 변수(또는 메모리 블록) Lifetmie 분류 Memory Layout of a C Process 함수 호출과 Stack Automatic Variable & Stack 1. 변수(또는 메모리 블록) Lifetime 분류 ① Static Its lifetime is the entire duration of the program's execution Global and Static Local Variables A static variable is stored in the data segment of the "object file" of a program ② Automatic An automatic variable has a lifetime that begins when program execut..

Language Study/C 2022.12.14

[C/C++] 10 - 02 문자열 버퍼 동적 할당

① whlie문을 활용해볼까요. 1) 사용자가 Ctr - z를 눌러 EOF를 입력할 때까지 최대 MAX_LINES 만큼의 문자열을 입력받음 2) EOF인 경우 gets()의 return은 NULL이다. ② gets_malloc()을 사용해볼까요. 불필요한 메모리 사용을 줄이기 위해 문자열 입력을 위한 버퍼를 동적으로 할당. ※ gets_malloc() gets() 함수의 문자열을 입력 받을 버퍼를 malloc()으로 동적 할당 입력이 EOF이면 동적으로 할당 받ㅇ느 버퍼를 해제하고 NULL 을 Return 문자열 입력 버퍼 동적으로 할당 받는 문자열 입력 버퍼들을 관리하기 위한 문자열 포인터 배열 str_ptrs[]선언하고 NULL값으로 초기화 실제 입력 LINE 수에 해당하는 문자열 버퍼만 할당 동적으..

Language Study/C 2022.12.14