Language

Language/Java

함수형 프로그래밍과 일급 객체란

먼저 함수형 프로그래밍에 대해서 이야기를 하기 전에 프로그래밍 패러다임에 대해서 이야기를 해보자. 패러다임 먼저 패러다임의 정의는 다음과 같다. 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념 프로그래밍 패러다임 그럼 프로그래밍 패러다임(Programming Paradigm)은 무엇일까? 오브젝트의 저자이신 조영호님은 프로그래밍 패러다임을 다음과 같이 정의한다. 특정 시대에 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일 우리가 어떤 프로그래밍 패러다임을 사용하느냐에 따라 우리가 해결할 문제를 바라보는 방식과 프로그램을 작성하는 방식이 달라진다. 즉, 새로운 프로그래밍 패러다임이 등장하면 새로운 ..

Language

[UML] 클래스 다이어그램

최근에 개발 관련 서적들을 읽으면서 복잡한 부분은 클래스 다이어그램을 보고 해당 클래스들의 구조를 이해 할 수 없다는 것이 가장 큰 문제였다. 코드를 보면서 어느정도 되돌아가면서 이해를 할 수는 있었지만 너무나도 번거로웠다. 또 그러다보니 책을 읽는데에 있어서 집중력도 크게 저하됐다. 앞으로는 좀 더 수월한 독서를 위해 클래스 다이어그램을 한 번 공부를 제대로 하고 넘어가는 것이 좋을 것 같아 이번 기회에 정리를 하게 되었다. 클래스 다이어그램에는 여러가지 요소들이 존재한다 하나 하나 살펴보자. 클래스(Class) 클래스는 크게 3개의 구역으로 나누어 표시한다. 클래스 이름 속성 (필드) 기능 (메서드) 여기서 클래스 이름은 필수이고, 나머지 구역은 필수가 아니다. 속성과 기능의 구조에 대해서 살펴보기 ..

Language

gradle build vs Intellij IDEA build

개발바닥 오픈채팅방에서 호돌님이 인프런에서 질문자의 문제를 해결하는 과정에 있어서 Build Tools를 Gradle로 설정해야만 오류가 발생하지 않고 Intellij로 설정하면 오류가 발생한다는 원인을 발견하였다. 평상시에도 빌드의 속도를 높이기 위해서 Intellij IDEA를 사용한다던가 혹은 TEST 코드에서 @Slf4j가 제대로 동작하지 않을 때, Intellij IDEA로 변경하면 해결이 된다는 해결책들도 더러 있었지만 도대체 둘의 차이가 무엇인지 궁금해하다가 이젠 더이상 참을 수가 없었다. 둘의 차이가 무엇인지 알아봤다. Intellij IDEA build를 사용하다가 발생한 에러에 대해서 정리해놓은 포스팅을 찾아 볼 수 있었다. 해당 포스팅의 오류 상황은 다음과 같다.기존의 프로젝트에서 D..

Language/Java

Logger에서 hibernate SQL 로그 출력이 안될 경우

yml 혹은 properties를 사용하면서 다음과 같이 로깅에 대한 범위를 설정한다. // properties logging.level.org.hibernate.sql : debug // yml logging: level: org.hibernate.sql : debug 실제로도 자동 완성이 위와 같은 포맷으로 유도를 해주는데, 패키지로 유도를 해주는 것이여서 위처럼 설정하면 제대로 된 로그 쿼리가 찍히지 않는다. 다음과 같이 수정하자. // properties logging.level.org.hibernate.SQL : debug // yml logging: level: org.hibernate.SQL : debug 마지막에 sql -> SQL로 바꿔주어야 한다. 이게 문제인지 몰라서 다른 부분을 손보..

Language

Lombok ToString 순환참조 방지하기

JPA에서 엔티티를 등록하고 ToString을 호출할 때 연관 관계가 적용되어있으면 순환 참조로 인해 StackOverFlow가 발생하게 된다. Lombok @ToString 동작 원리 다음과 같은 상황을 보자. @Entity @Getter @ToString public class Member { @Id @GeneratedValue private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity @Getter @ToString public class Team { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "team") private List member..

Language/Java

가비지 콜렉션(Garbage Collection)

JVM의 Execution 영역에 있는 가비지 콜렉터와 가비지 콜렉션에 대해서 알아보자. C나 C++을 해본 사람들은 다음과 같은 명령어가 낯이 익을 것이다. ~(), mallac(), free() 이 들은 모두 프로그래머가 직접 메모리를 할당해주거나 해제하는 역할을 하는 메서드이다. 하지만 자바는 이와 달리 프로그래머가 직접 메모리를 할당 해제해주는 것이 아닌 GC(Garbage Collector)가 메모리를 자동으로 할당하거나 해제해주는 작업을 해준다. C나 C++ 처럼 어떠한 가비지 콜렉터가 없이 프로그래머가 직접 메모리를 관리를 해줘야 하는 언어를 비관리형 언어(Unmanaged Language) Java, GO, C#, Python 같이 가비지 콜렉터가 직접 메모리를 관리해주는 언어를 관리형 언..

Language/Java

JVM

JVM JVM은 Java Virtual Machine의 약자이다. 직역하면 자바를 실행하기 위한 가상 기계라는 뜻인데, 실제로 그 의미와 크게 다르지 않다. 우선 JAVA의 가장 큰 특징은 OS에 종속적이지 않다는 것이다. OS별로 각기 다르게 동작할 수 있는데, OS 종속되지 않는 다는 말은 OS위에 어떤 프로그램을 이용해 실행이 가능하다는 것이다. 즉, JVM이란 OS에 종속받지 않고 CPU가 JAVA를 인식하거나 실행할 수 있게 해주는 가상 머신이다. JAVA 컴파일러 Java가 컴파일되는 과정을 이해하기 전에 컴퓨터가 명령어를 인식하는 과정부터 이해를 해야한다. 컴퓨터는 0과 1밖에 이해하지 못한다. 즉, 이러한 컴퓨터가 이해할 수 있는 명령어를 저급언어(Low-level Language)라고 부..

Language

전략 패턴

이전 포스팅에서 템플릿 메서드 패턴에 대해서 학습하였습니다. 템플릿 메서드 패턴의 가장 큰 문제는 자식 클래스가 부모 클래스를 상속 받음으로써 부모 클래스에게 강하게 의존한다는 것이 문제였는데요. 좋은 객체지향 설계 원칙에서 두 가지를 지키지 못하는 상황이 발생해 버린 것이죠. 그 두 가지는 다음과 같습니다. 상속보다는 구성을 활용한다. 인터페이스에 맞춰서 프로그래밍을 한다. 전략 패턴은 이러한 템플릿 메서드 패턴의 단점을 해결 한 방식입니다. 우선 정의부터 살펴보도록 할까요? 전략 패턴의 정의 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만든다. 이 전략 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 알고리즘 군 여기서 알고리즘 제품군 이라는..

Bombo_
'Language' 카테고리의 글 목록