Language/Java

Language/Java

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

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

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/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/Java

enum의 Enum 상수 객체의 변수 사용과 생성

Enum 상수 컬렉션을 정의하는데 사용하는 특수한 자바 유형이다. Enum 클래스로 상수를 정의할 때에는 다음과 같이 정의를 한다. enum Constants { AA, BB, CC, DD } enum에 접근 할 때에는 Constants.AA 와 같이 스태틱 변수에 접근하는 것처럼 접근을 할 수 있고, 각 값에 대해서 ordinal 순서에 대한 값이 생긴다. 어떻게 생기는 것일까? 위에 힌트가 있다. 자세히 살펴보면 Enum 클래스라고 명시를 했는데, 선언을 하는 것을 보니 enum이라고 되어 있다. 사실 enum은 Enum 클래스를 생성하는 특수한 방식이다. Enum 클래스의 생성자를 살펴보면 그 비밀을 알 수 있다. /** * Sole constructor. Programmers cannot invo..

Language/Java

7-7 내부 클래스 (재업로드), 익명 클래스

내부 클래스 내부 클래스는 이름 그대로 클래스 안의 클래스이고, 말 그대로 클래스 안에 클래스를 선언하는 것과 같다. 우리는 지금까지 클래스끼리는 격리 시켜서 생성했는데 내부에도 클래스를 생성할 수 있다는 것이다. 다음과 같이 말이다. // 기존의 방식 class A { } class B { } ============= class AA { class BB { } } 위처럼 구성이 되어있을 때 BB를 AA 클래스의 내부 클래스, AA를 BB 클래스의 외부 클래스라고 부른다. 그럼 위와 같은 내부 클래스를 사용하는 이유는 무엇일까? 결론부터 얘기하자면, 캡슐화 및 코드의 복잡성을 줄이는 것이다. 예를 들어서 BB라는 클래스는 AA의 클래스만 사용을 한다고 가정하자. 그럼 BB 클래스는 AA 클래스의 객체를 ..

Language/Java

12. Generic 제너릭

Generic JDK1.5 부터 도입된 제너릭스는 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주어 타입 안정성을 높이고 형변환의 번거로움을 줄여줄 수 있는 최근에는 꼭 사용해야 할 기능이다. 이제는 공식문서를 볼 때 제너릭스를 알지 못하면 공식문서 분석도 버거울 정도이다. 실제로도 이러한 문제를 몸소 겪어서, 이번에 제너릭스에 대해 한 번 자세히 들여다보았습니다. 제너릭스는 다음과 같이 선언이 가능하다. class Box { T item; void setItem(T item) { this.item = item; } } 기존의 보던 클래스와 다른 점을 살펴보면 제너릭 타입변수 T가 생긴 것을 볼 수 있다. 여기서 한 가지 의문을 가질 수 있는 경우는 T의 의미인데 f(x..

Language/Java

4-2 자바 반복문

반복문 반복문에는 for문, while문, while문의 변형인 do-while문이 있다. for문 while문과 do-while문의 가장 큰 차이는 for문이나, while문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만, do-while문은 do-while에 속한 문장은 무조건 최소한 한 번은 수행될 것이 보장된다. for문 for문은 반복 횟수를 알고 싶을 때 적합하다. for(초기화;조건식;증감식;) { // 조건식이 참일 때 수행될 문장들을 적는다. } == for(int i = 1; i

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