Program Language16 코루틴 개념 정리, 디버깅 or 출력해보기(feat. IntelliJ Configuration Template) 2023년 회사에서 코틀린을 썼지만, 쓰자마자 코루틴을 바로 사용하지는 않았었다2024년쯤 코루틴을 공부하고 백엔드 코드에 조금씩 사용하는 영역을 넓혀갔다간단하게 코루틴 기본 개념과 활용까지 블로깅을 조금씩 해보려고 한다로니콜먼도 아마 코루틴을 사용해본 경험이 있는 것 같다. 왜냐하면 "Light Weight Baby!!"라고 외치며 헬스를 했으니 말이다 코루틴(Coroutine)이란?코루틴이란 Light-Weight Thread(경랑스레드)라고도 불리며, 스레드와는 독립적으로 실행되는 비동기 작업의 단위이다 내부적으로는 Continuation이라는 객체에 현재 작업(Job)의 진행 상태를 저장하고, suspend와 resume을 통해 작업을 일시 중단하거나 재개할 수 있다이 특성 때문에 코루틴은 스레드.. 2024. 12. 2. Kotlin에서 기존 객체를 다른 객체로 변환하는 다양한 방법 백엔드를 개발하다 보면 기존 객체를 DTO(Data Transfer Object)로 변환하거나 다른 클래스 형태로 매핑해야 하는 일이 자주 발생한다예를 들어, 클라이언트 요청에 맞춘 데이터 포맷 변경, API 응답을 위한 직렬화 객체 변환, 또는 엔티티와 DTO 간 데이터 매핑 등...이 글에서는 Kotlin에서 객체를 변환하는 다양한 방법을 소개하고, 각 방법의 장단점을 비교해 보려한다목표Person -> PersonDto기본적으로 동일한 필드 구조를 가진 클래스 간 변환Person -> PersonExtraDto추가 필드가 포함된 클래스에 데이터를 매핑PrivatePerson(private 필드) -> PersonDto접근제어자가 설정된 필드를 매핑성능 테스트예제 클래스먼저, 예제에서 사용할 간단한 .. 2024. 11. 27. 자바에서의 다양한 문자열 포맷팅 방법(feat. MessageFormat) 복잡한 거 아니니깐 빠르게 알아보자!1. String 더하기단순하지만 강력한 방법이다다만.. 복잡시럽게 보일 수 있다는 단점 존재2. printfC언어를 배웠다면 익숙한 그 printf문법당연히 패딩넣기도 된다.다만 %p, %x등의 메모리 관련 포맷형식을 사용하면 UnknownFormatConversion 예외가 발생한다자바만의 특이점으로는 %h를 통해 메모리해시값을 얻을 수 있다. 슬프지만 당연하게도 Primitive type은 메모리주소를 알 수 없다3. String.format()printf와 비슷하게 형식을 지정할 수 있다그럼 차이점이 뭐야? 할 수 있는데, printf는 포맷팅 동시에 출력이 되는 방식이고, String.format은 반환형인 String으로 만들어서 재사용한다던지, 좀 더 가공.. 2024. 8. 29. Mutable/Immutable Object의 Value를 계속 변경하면 무슨 일이 발생할까? (feat. VisualVM, GC) 이번 포스팅으로 Immutable 객체의 상태(값)을 반복해서 변경하면 무슨 일이 발생하는지 알아보자 관찰점: 힙 메모리가 어떻게 변하는지, 힙 메모리에 올라온 객체를 재사용하는지, GC가 몇 번 발생하는지Visual VMHeap 메모리를 관찰하는 Tool로 VisualVM을 사용할 것이다 이 프로그램은 몇몇 플러그인을 설치할 수 있는데, 나는 GC를 보기 위해 Visual GC 플러그인을 설치했다 예제 코드Immutable(Integer)실행결과를 예상해보자이전 포스팅 글들을 봤다면 Integer를 이런 식으로 더하다보면 새로운 힙 메모리가 할당된다고 예상할 수 있을 것이다x += 10; // 이 코드는 아래 코드로 변환되어서 실행x = Integer.valueOf(x.intValue() + 10); .. 2024. 8. 27. 자바에서 두 변수 값 바꾸기(Swap, Generic, Wrapper) 앞의 글들을 보고 왔다면 자바에서의 Call By Value때문에 특정 메서드 내에서 지지고 볶아도 값이 바뀌지 않는다는 것을 알 수 있을 것이다Call by Value with primitive type - 잘못된 사용- 실행결과두 값이 바뀔 수 있도록 해보자!! Custom Wrapper Class 사용(Call by Value with mutable reference type)임시로 값을 담을(Wrapping) 클래스를 정의하자잘 바꼈다!!근데 뭔가 좀 아쉽다.. 더 개선할 수 있는 부분이 없을까?? IntegerWrapper를 GenericWrapper로 변환자바의 Generic을 활용해 어떤것이든 담을 수 있게 해보자Generic으로 담았기 때문에 Integer, Long타입 둘 다 값이 바뀌는.. 2024. 8. 24. Reference type(Mutable Object)의 Call By Value 살펴보기 2 이전 글에서는 Reference Type 인자로 전달될때 Call By Value의 동작에 관해서 JNI로 살펴보면서 Integer, AtomicInterger를 통해 객체 타입이 불변/가변으로 나뉠 수 있다는 것을 배웠다 이번 글에서는 Reference Type으로 전달 가능한 가변 객체에는 어떤 것들이 있는지 살펴본다 Call By Value와 가변 객체를 활용해서 객체를 넘기고 외부의 메서드에서 객체의 상태(값)을 변경하는 예시코드를 더 살펴보자 - Array- List- Map- Set - Custom Object(Custom Wrapper Class)이건 내부 구현 로직에 따라 가변or불변으로 구현할 수 있다. 여기서는 가변객체로 만들어본다 > 가변 Custom Object값이 변한 것을 볼 수.. 2024. 8. 23. Reference type의 Call By Value 살펴보기(feat. JNI, Immutable/Mutable) 저번 Primitive type글에 이어서 작성한다저번 글을 못봤다면, 여기 Java 카테고리에 있는 이전 글을 살펴보면 된다 이전 글의 서두를 옮겨와봤다최근에 다시 자바공부를 하다가 이런 면접 질문이 있는 것을 봤다Java는 Call by Value 일까요? 아님 Call by Reference 일까요?사실 이 질문 자체로는 틀린 질문이라 생각한다일단 맞는 질문으로 변환해보면Call by Value 와 Call by Reference 의 차이점에 대해서 말해주세요그럼, Java는 Call by Reference 방식을 지원할까요?라는 꼬리질문식 질의문이 되어야 맞는다고 생각한다 자, 그럼 왜 저런 질문을 하는걸까?일단 질문의 의도는 2가지이다1. 헷갈리게 만들기2. Java의 기본 동작과정을 잘 이.. 2024. 8. 21. Primitive type의 Call By Value 살펴보기(feat. JNI) 최근에 다시 자바공부를 하다가 이런 면접 질문이 있는 것을 봤다 Java는 Call by Value 일까요? 아님 Call by Reference 일까요?사실 이 질문 자체로는 틀린 질문이라 생각한다일단 맞는 질문으로 변환해보면Call by Value 와 Call by Reference 의 차이점에 대해서 말해주세요그럼, Java는 Call by Reference 방식을 지원할까요?라는 꼬리질문식 질의문이 되어야 맞는다고 생각한다 다른 글에서 쓴 내용이긴 하지만 영어 자체를 하나하나 짤라서 해석해보자 Call 이란 무엇일까?내가 vba다음으로 배운 언어인.. C언어를 예로 들어본다C언어를 배울때 나오는 것은 함수의 선언/호출/정의부 용어가 나온다영어로는 Declaration/Call/Definition라.. 2024. 8. 20. DSL이란? 자바로 백엔드개발을 해본 사람들은 queryDSL이란 걸 들어봤을 것이고, Spring Data JPA를 사용하면서 타입세이프하게 쿼리를 동적으로 만들어주며 컴파일 시점에 오류를 미리 알 수 있게 도와주는 라이브러리라고 알고 있을 것이다.또한 코틀린 안드로이드나 코틀린 스프링을 해본 사람들은 Kotlin DSL이란 말 또한 들어봤을 것이다.그럼, 이제 질문을 던져볼 수 있다.queryDSL/KotlinDSL을 사용하셨군요? 그럼 DSL에 대해서 설명해주실래요?답: ㄱ..그게..뭐죠? DSLR은 아는데..헤헿라고 답하면 망한거다ㅋ나는 옛날사람이라서... 어떤 도구를 잘 사용하는것도 중요하다고 생각하면서 동시에 그 도구에 붙여진 이름의 뜻을 아는 것도 중요하다고 생각한다. 정의DSL(Domain Specif.. 2024. 6. 6. Programming Study Honey Tips (feat. JetBrains/Rust) 프로그래밍 언어를 공부하는 방법은 정말 다양하다 - 강의 - 책 - 학원 - 과외 - 그 외 ✅ 나는 이 중에 혹시나 학생이신 분들 중 Free Educational Licenses 을 받은 분들 혹은 현업에 계신 분들 중 JetBrains 계열(대표적으로 IntelliJ)을 회사에서 사준 경우 혹은 개인이 라이센스를 구매해서 사용하는 경우에 한해서 좋은 방법이 있어 공유하고자 한다 나는 JetBrains All Product Pack을 구매해서 사용중이다 연간구독으로, 매년마다 결제비가 낮아지는 장점이 있다 잡설하고, 어떻게 인텔리제이를 사용해서 프로그래밍 공부를 할 수 있다는 걸까? IntelliJ를 실행하고, Learn 탭을 활성화 시키면 Learn IDE Features / Learn to pro.. 2024. 3. 12. 프로그래밍 언어별 특징들 주니어~중니어 레벨에서 여러 언어들을 공부하고 다뤄보다 보니깐 프로그래밍 언어는 개발을 하기 위한 기초/방법이면서, 그 언어의 컨셉에 알맞게 사용해야 하는게 올바른 사용방법이라고 생각한다 보통 이런 것들을 Best Practice / Do Not Apply Anti Pattern 이라고 부르며, 잘 이해하고 쓰기 위한 지침서라고 생각하면 된다 개발을 할때 항상 위에 키워드들을 검색해보는 습관을 기르자 잡설하고 여러 프로그래밍 언어들의 특징들에 대해서 알아보자 컴퓨터사용자 관점 - 수준(Level) Low Level Language(저수준 언어) 컴퓨터가 직접 이해하고 실행할 수 있는 언어 0과 1로 이루어진 2진 코드(binary code)로 표현되며, 하드웨어 직접 제어가 가능 사람이 이해하고 사용하기.. 2024. 2. 13. Whitespace Characters 제거하기 + 여러가지 Whitespace Characters는 공백문자 그리고 이 WhiteSpace Character의 종류에는 1. 가로 크기를 차지하는 공백 문자(눈에 보임) 2. 세로 크기를 차지하는 공백 문자(눈에 보임) 3. 1 또는 2지만 눈에 보이지 않는 공백 문자가 있다 특히 3번의 경우는 일부러 사용하는 경우도 있고(화면에 보여줄 때), 일부러 제거하는 경우도 있다(서버에서 받을 때) 아니 3번같은게 어디 있어~? 라고 말씀하시는 분들은 아래에 더블클릭으로 보라돌이 뚜비 나나 뽀를 선택해보자 NORMAL의 경우는 전체가 블록으로 지정되고, SPACE의 경우는 공백마다 블록 지정, ZERO_WIDTH_SPACE의 경우에는 눈에는 NORMAL이랑 비슷하지만 [보라돌이]를 누르면 보라돌이만 선택되고 [뚜비]쪽을 .. 2022. 11. 26. CSS 공부 history + 공부해야될 순서 요즘 어쩌다보니 CSS를 공부하고 있다 TypeScript와 Angular도 공부하기 넘 바쁜와중에 CSS이놈이 Java Base인 백엔드 개발자인 나를 너무 고통스럽게 한다 하루에도 자괴감과 성취감을 매 순간마다 주는 녀석이 CSS(Cascading Style Sheets)이다 말 그대로 폭포처럼 흐르다 란 의미를 갖고있기때문에 이 친구들도 몇몇 속성은 상속이 되고, 안되고 등등을 갖고 있다 그리고 기본적으로는 순차적 구조라서 1번째 라인에서 color: black; 이었더라도 500번째 줄에서 color: red;가 들어가면 red가 된다( 아 물론 !important 가 걸려있는 경우 제외) 기본적으로 배워야 할 순서는 1. 선택자 2. display & border 3. box model 4. p.. 2022. 8. 13. 폰으로 쓰는 짧글 DTO 클래스를 Map으로 변환해보면 LinkedHashMap이 된다- 순서를 보장하며 해시의 시간복잡도를 가지는 맵이다 나중에 인터페이스 자료형. 구현체의 차이 해시테이블 해시맵 멀티스레드에 안전한 형태 자바에서는 해시충돌을 이중함수로 해결하는데 어떻게 해결하는지.. 사이즈별 리스트는 어떻게 변하는지 등 자료구조에 대한 재밌는 글도 쓰려한다 2022. 5. 17. 공백이 2칸 이상일때 정규식 공백이 1칸 이상일때의 정규식으로는 특정 필드값을 받을 때 유연하지 못하다 (Ex: 닉네임을 입력해주세요: 티스토리 개발꾼(X) 난 사실 1자리 수의 공백은 허용해주고 싶다 ) 이럴때는 checkSpace를 이용하면 된다 입력값 사이에 2칸 이상 있을 시 true를 뱉는 정규식 패턴이다 그리고 Single Value / Array Value를 모두 판단해주기 위해서 isError로 Validation을 하면 된다 const isError = (v) => { const values = Object.values(v); for (const item of values) { if (checkSpace(item)) { console.log('입력값에 공백이 2칸 이상 있습니다'); return true; } if .. 2022. 5. 5. Axios 사용법 후론트엔드 글은 잘 안쓰는데.... 쓰려고한닷[ 나는 ES6를 좋아한다 ] 일단 클라이언트단에서 HTTP통신을 하기 위한 방법에는 Ajax, Fetch, Axios 3대장이 있다 위에 나온것처럼 Axios가 지원 브라우저도 제일 많고, XSRF(CSRF) 보안도 갖추고 있으며, response가 JSON type이며, Promise기반이기때문에 Call back hell을 막을 수 있다. CDN 방식 npm install 방식 npm install axios 파일 직접 다운로드 * ajax의 문제점 // Ajax 깊어진 callback 형태 ⇒ 알아보기 어려움 // Axios 알아보기 쉬워진 가독성 * interceptor로 요청, 응답 custom하기 const validate = (stat) => {.. 2022. 3. 30. 이전 1 다음