728x90

자바스터디 25

[Java] Integer.valueif 와 parseInt의 차이점

자바를 사용하다보면 문자열 형태로 표현된 정수를 정수 타입 값으로 변환해야할 경우가 있다. 이 경우 valueOf() 메서드와 parseInt() 메서드를 사용하게 된다. int number1 = Integer.valueOf("100"); System.out.println("number1 = " + number1); int number2 = Integer.parseInt("100"); System.out.println("number2 = " + number2); "100"이라는 문자열을 정수형 값으로 변경하는 방법은 위 코드에서 본 것처럼 Integer.valueOf() 메서드와 Integer.parseInt() 메서드가 있습니다. 이 프로그램을 실행시키면 다음과 같이 동일한 결과를 얻을 수 있습니다. ..

JAVA 2022.04.15

Spring Data & JPA & Hibernate 차이점

Spring Data JPA Spring Data JPA는 Spring Framework에서 제공하는 모듈 중 하나로, 개발자가 JPA를 좀 더 쉽고 편하게 사용 할 수 있도록 도와준다. 특징을 잠깐 살펴보자면, Hibernate와 같은 구현체들을 좀 더 쉽게 사용할 수 있도록 추상화한 것. JPA를 한 단계 추상화시킨 Repository 인터페이스를 제공. 개발자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록. Hibernate와 Spring Data JPA를 사용하는 데에는 사실 큰 차이가 없지만 Spring Data JPA가 권장되는 이유는 크게 두 가지. 구현체 교체의 용이성 ..

[Java]프로세스와 스레드의 차이

프로세스와 스레드에 대한 정의 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위. 스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위. [프로그램 → 프로세스 → 스레드] 프로그램 → 프로세스 프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태. ☞ 메모리에 올라가 있지 않은 : 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았다는 뜻. 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다. ☞ 정직인 상태 : 정적이라는 단어 그대로, 움직이지 않는 상태라는 뜻. 한 마디로 아직 실행되지 않고 가만히 있다는 뜻. 즉, 프로그램이라는 단어는 아직 실행되지 않은 파일 그 자체를 가리키는말이다. 윈도우의 *..

JAVA 2022.04.12

함수형 프로그래밍의 목적

프로그래밍 패러다임(Programming Paradigm) 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다. 최근의 프로그래밍 패러다임은 크게 아래와 같이 구분할 수 있다. 명령형 프로그래밍: 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++) 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#) 선언형 프로그래밍: 어떻게 할건..

[Java] 함수형 인터페이스란?

함수형 인터페이스(Functional Interface) 란? 자바에서는 람다식을 통해 순수함수를 선언 할 수 있게 되었지만, 자바는 기본적으로 객체지향 언이이기 때문에 순수함수와 일반함수를 다르게 취급하고 있다. 이를 구분하기위해서 자바에서는 함수형 인터페이스라는것이 나오게 되었다. 함수형 인터페이스란 함수를 1급 객체처럼 다룰 수 있게 해주는 어노테이션으로, 인터페이스에 선언하여 단 하나의 추상 메소드만을 갖도록 제한하는 역할을 한다. 함수형 인터페이스를 사용하는 이유는 Java의 람다식이 함수형 인터페이스를 반환하기 때문이다. 예를 들어 우리가 두 값 중 큰 값을 구하는 익명 함수를 개발하였다고 하자. 그러면 우리는 지금까지 다음과 같이 개발을 하였을 것이다. public class Lambda {..

JAVA 2022.04.09

[Java]람다(Lambda)를 사용하는 이유

람다를 사용하는 이유는 무엇일까? 먼저 이 Lambda라는 녀석을 한번 알아보자. 람다식(Lambda Expression)이란 무엇인가? Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어있다. 그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다. 그렇기 때문에 우리는 Stream API를 정확히 이해하기 위해 람다식과 함수형 인터페이스에 대해 알고 있는것이 좋다. 람다식(Lambda Expression)이란 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다. 익명함수(Anonymous Fun..

JAVA 2022.04.08

[Java] DTO, DAO, Entity 그리고 Repository 란?

DAO(Data Access Object)란? repository package 실제로 DB에 접근하는 객체. Persistence Layer(DB에 data를 CRUD하는 계층) 이다. Service와 DB를 연결하는 고리의 역할을 한다. SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공한다. JPA 대부분은 기본적인 CRUD method를 제공하고 있다. extends JpaRepository DTO(Data Transfer Object)란? dto package 계층간 데이터 교환을 위한 객체(Java Beans)이다. DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다. 즉, DB의 데이터가 Presentation Logic Tier로..

JAVA 2022.03.29

[Java] 가비지 컬렉션 GC(Garbage Collection)의 동작원리와 동작하는 시점

Garbage Collection(가비지 컬렉션)이란? 메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능. 즉, 동적 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제를 하는 기법이다. 장점 : GC를 이용하게 되면 개발자가 동적으로 할당한 메모리 영역 전체를 완벽하게 관리하지 않아도 된다. GC를 통해 유효하지 않은 포인터 접근이나 메모리 누수 같은 버그를 줄이거나 막을 수 있다. 유효하지 않은 포인터 접근 : 이미 동적 할당한 메모리를 해제한 영역에 접근하게 되는 버그 이중 해제 : 이미 해제된 메모리를 또 다시 해제하는 오류를 줄일 수 있음. 메모리 누수 : 더 이상 사용하지 않는 메모리 영역을 해..

JAVA 2022.03.29

[Java]error exception 이란? 차이점

오류와 예외란? 오류(Error) : 시스템에 비정상적인 상황이 생겼을 때 발생. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류. 따라서 개발자가 미리 예측 할 수 없기 때문에, 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 됨. 예외(Exception) : 오류가 시스템 레벨에서 발생한다면, 예외는 개발자가 구현한 로직에서 발생. 즉, 예외는 발생활 상황을 미리 예측하여 처리 할 수 있다. 개발자가 처리 할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는것이 중요. 예외 클래스 모든 예외 클래스는 Throwable 클래스를 상속받고 있으며, Throwable은 최상위 클래스 Object의 자식. Throwable을 상속받는 클래스는 Error와 Except..

JAVA 2022.03.28

[Java] 동시성 문제

CPU가 어떤 작업을 처리하기 위해 데이터가 필요할 때, CPU는 RAM의 일부분을 고속의 저장 장치인 CPU Cache Memory로 읽어들인다. 이 읽어들인 데이터로 명령을 수행하고 이 데이터를 다시 RAM에 저장하기 위해서는 데이터를 읽어들일 때의 과정을 역순으로 밟는다. 즉, 적절한 시점에 CPU Cache Memory에서 RAM으로 쓰기 작업을 하게 된다. 그러나 CPU가 캐시에 쓰기 작업을 수행했다고 해서 바로 RAM으로 쓰기 작업을 수행하지 않는다. 반대의 과정인 읽기 작업도 마찬가지이다. 동시성 프로그래밍에서는 CPU와 RAM의 중간에 위치하는 CPU Cache Memory와 병렬성이라는 특징 때문에 다수의 스레드가 공유 자원에 접근할 때 2가지의 문제가 발생 될 수 있다. 가시성 문제 가..

JAVA 2022.03.28
728x90