본문 바로가기

프로그래밍 언어27

Scala의 map, flatMap 안녕하세요 조엘입니다. 🙋🏻‍♂️ 현재 Scala를 메인 언어로 사용하며 백엔드 개발을 하고 있는데요. Java와는 또 다른 Scala의 매력을 알아가고 있습니다. 함수형 프로그래밍으로써 Scala를 다룰 때 정말 자주 등장하는 map, flatMap을 살펴봅시다. 피드백 환영입니다. 댓글 달아주세요 :) List로 입문하기 Scala는 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어예요. 오늘 알아볼 map, flatMap 모두 고차함수 인데요. 고차함수란 함수를 인자로 전달받거나, 함수를 결과로 반환하는 함수를 말해요. map과 flatMap에 입문하기 위해 List를 통해 map과 flatMap이 각각 어떤 역할을 수행하는지 알아봅시다. (Java8의 Stream과 매우 유사합니다) map() .. 2023. 11. 20.
JVM의 GC 안녕하세요! 조엘입니다! 🎉 오늘은 JVM의 GC에 대해 알아보는 시간을 가져볼게요! 💪💪 피드백 환영입니다! 댓글 달아주세요 :) *** GC가 동작하는 법 *** 기본적인 GC의 동작은 해당 포스팅에서 다루었어요! 해당 포스팅의 내용에 의존하고 있으니 이를 먼저 읽어보시는 것을 추천합니다 :) https://papimon.tistory.com/93 저는 GC가 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 열한 번째 토픽은 GC입니다. 🙌🙌 C나 C++을 다룰 때는 메모리 관리를 직접 명시적으로 해줬어요. 하지만 JAVA, JavaScript, Python 등을 쓰면서부터 joel-dev.site Java에서의 GC, 즉 JVM의 GC는 기본적으로 Mark And Sweep 방식으.. 2021. 10. 3.
저는 GC가 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 열한 번째 토픽은 GC입니다. 🙌🙌 C나 C++을 다룰 때는 메모리 관리를 직접 명시적으로 해줬어요. 하지만 JAVA, JavaScript, Python 등을 쓰면서부터는 메모리 관리에 크게 신경을 안 써줬는데요. 알아서 동적 메모리 영역이 관리되는 방법! 한 번 같이 알아봅시다. 🎯🎯 *** GC란? *** GC는 메모리 관리 기법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요 없게 된 영역을 해제하는 기능이에요. 여기서 동적으로 할당했던 메모리 영역은 프로그램 런타임에 사용되는 Heap 영역 메모리를 뜻하고, 여기서 필요 없게 된 영역은 어떤 변수도 가리키지 않게 된 영역을 의미합니다. C와 C++에서 Heap 영역의 메모리를 사용하기 위해서는,.. 2021. 10. 2.
저는 어노테이션이 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 일곱 번째 토픽은 어노테이션입니다. 📜📜 스프링 프레임워크로 웹 개발을 하면서 참 많은 어노테이션을 쓰게 되는데요. 하지만 막상 누가 어노테이션이 뭐냐고, 왜 쓰냐고 물어보면 대답을 못할 것 같더라고요? 🤔🤔 이번 기회에 "어노테이션은 이래서 쓰는 거야" 확실히 말할 수 있게 정리해봅시다! 👏👏 참고로 리플렉션에 대한 이해가 있으면 포스팅 읽기가 더 수월해요 :) Reflection API: https://papimon.tistory.com/82 *** 어노테이션이란? *** 어노테이션이 뭔지 정의부터 알아봐야겠죠? Oracle의 Java Tutorial에서는 어노테이션을 다음과 같이 설명하는데요. Annotations, a form of metadata.. 2021. 6. 11.
Reflection API 안녕하세요! 조엘입니다! 🎉 오늘은 자바의 Reflection API에 대해 알아보는 시간을 가져볼게요! 💪💪 피드백 환영입니다! 댓글 달아주세요 :) *** Reflection API란? *** Reflection API의 정의를 먼저 알아보도록 해요. 공식문서에서는 다음과 같이 Java Reflection API를 설명하는데요. Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterpar.. 2021. 6. 9.
저는 JVM이 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 여섯 번째 주자 바로 JVM입니다. ✨✨ IDE에서 열심히 작성한 코드를 기도 메타와 함께 play 버튼만 누를 줄 알던 과거를 이제 뒤로하고! 이번 기회를 통해 작성한 자바 코드가 실제 하드웨어까지 어떻게 전달되는지 알아보도록 해요. 😁 *** Java 프로그램 실행 flow *** IDE의 플레이 버튼을 누르면 사실 다음과 같은 과정이 일어나게 되어요. 1. 개발자들은 IDE를 키고 열심히 자바 문법에 맞춰 소스코드(.java) 를 작성합니다. 2. javac 컴파일러를 통해 바이트코드(.class) 를 생성합니다. 3. 해당 바이트코드를 실행할 수 있는 런처를 실행합니다. 4. 런처는 내부적으로 JVM에서 바이트코드를 동작시킵니다. 5. JVM에서는.. 2021. 5. 28.
저는 SOLID가 처음이라니까요? (2편) 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 네 번째 주자 바로 SOLID 원칙입니다. 👏👏 SOLID가 왜 중요한 개념인지 같이 공부해보도록 해요! 저번 1편에 이어 2편에서는 LSP / ISP / DIP를 다루도록 하겠습니다! *** Liskov Substitution Principle (리스코프 치환 원칙) *** 세 번째 원칙은 LSP, 리스코프 치환 원칙이에요. 정의는 다음과 같아요. "상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상으로 작동해야 한다." LSP는 앞서 살펴본 OCP를 지원하는 원칙이에요. LSP는 다형성에 대한 원칙이거든요. LSP를 준수한 프로그램에서는 상위 타입의 객체를 사용하는 기존의 코드에, 하위 타입의 객체를 대입해도 프로그.. 2021. 4. 15.
저는 SOLID가 처음이라니까요? (1편) 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 네 번째 주자 바로 SOLID 원칙입니다. 🎺🎺 SOLID가 왜 중요한 개념인지 같이 공부해보도록 해요! 다룰 내용이 많아서, 1편에서 SRP / OCP를, 2편에서 LSP / ISP / DIP를 다루도록 하겠습니다! *** SOLID 원칙 *** 객체 지향 프로그래밍은 각자의 책임들을 완수하는 객체들을 만들고, 이를 협력시켜 큰 문제들을 풀게 했어요. 독립성과 신뢰성이 높은 객체들로 조합된 프로그램은 절차 지향적으로 작성된 프로그램에 비해 유지 보수와 확장에 유리하다고 해요. 하지만 이론은 알아도 막상 코드를 "객체 지향적"으로 작성하려면 머리가 굳어버리는데요! 대충 클래스 정의하고, 대충 조합해서, 뚝딱뚝딱 굴러가게만 짠 코드는 결코 유지 보수와 확장.. 2021. 4. 14.
저는 상태 패턴이 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 세 번째 주자 바로 상태 패턴입니다. 상태 패턴을 제가 어떻게 이해하고, 정리하고, 적용했는지 알려드릴게요! 💪 피드백 환영입니다! 댓글 달아주세요 :) *** 전략 패턴 복습 *** 앞선 포스팅에서 전략 패턴에 대해서 알아봤어요! - 전략 패턴 포스팅 : papimon.tistory.com/75 전략 패턴은 객체 간의 커뮤니케이션에 유연성을 부여하는 Behavioral 패턴 중에 하나였어요. 전략 패턴은 특정 전략(알고리즘)이 어플리케이션의 동작에 필요하며, 사용자의 요청 등 상황에 따라 특정 전략(알고리즘)이 런타임에 바뀌어야 할 때 유용한 디자인 패턴이에요. 여러 전략들을 추상화한 interface를 만들었고, 실제 전략들을 구체화시킨 class들을.. 2021. 3. 19.
반응형