728x90

전체 글 298

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

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

JAVA 2022.04.08

[회고] 이탈리아 가이드 출신 개발자의 2022년 3월 월간회고

기록을 통해 3월 한달을 정리해보고 반성과 앞으로 어떠한 방향으로 나아가야할지 살펴보는 내 자신을 뒤돌아보는 개발자 로춘남의 회고 기록. Tech Blog Fact 사실 : 무슨 일이 있었나?(사실) 리플렉션이란? GC종류별 차이 static이란? 인터페이스란? 동기와 비동기, 블로킹과 논블로킹 직렬화란? 동시성 문제 error 그리고 exception 이란? 알고리즘 1문제 GC동작원리와 동작시점 DTO, DAO, Entity 그리고 Repository란? Java와 관련된 글들을 작성. 알고리즘의 경우 하루 시작을 작은 루틴으로 해결하기 위해 쉬운문제로 풀다보니 크게 작성할만한 부분을 찾지 못했다. Felling : 무슨 느낌이 들었나?(느낌) 요즘 내 자신의 위치에 대해서 고민이 많았던 시기인데, ..

생각정리 2022.04.01

[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] 백준 별 찍기 2441번 2442번 2443번

다양한 별 찍기를 통해 Java의 for문을 한 번 생각해보기. 2441번 - https://www.acmicpc.net/problem/2441 i값을 증가시키면서 찍히는 *의 갯수를 줄여나가는 별 찍기. *를 찍기전에 " " 공백을 찍어준다. for (int i = 0; i j) { System.out.print(" "); } else { System.out.print("*"); } } System.out.println(""); } *가 찍히기전에 공백이 찍혀야 하므로, i가 j보다 크다고 가정할 때 " "를 출력. 첫 째줄은 i가 0 j가 0이니 if문의 else를 적용 받아 *를 입력값 5 만큼 찍어주고, 이후..

Algorithm 2022.03.28

[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

[Java] 직렬화(Serialization)란?

직렬화(Serialize)란? 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 역직렬화(Deserialize) byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부름 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태. 직렬화(Serialize) 시작 직렬화(Serialize) 조건 java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있는 기본 조건 pub..

JAVA 2022.03.26

[Java] sysnchronize(동기) asynchronize(비동기) 차이점 blocking non blocking 차이점

Blocking vs Non-blocking ☞ 프로그램을 바로 실행가능한지 아닌지에 따라 다름 Blocking I/O model System Call이 끝날때까지 프로그램이 대기하고, System Call이 완료될 때 return하는 모델 Wait Queue에 들어감. Non-blocking I/O model System Call이 완료되지 않아도 대기하고 않고 return 하는 모델 Wait Queue에 들어가지 않는다. Synchronize(동기) vs Asynchronize(비동기) ☞ 결과물을 가져오는 시점에 따라 다름 동기(synchorunous) 요청을 보낸후 응답을 받아야하지만 다음 동작이 이루어지는 방식 모든 일이 순차적으로 실행됌 비동기(asynchrounous) 요청을 즉시 처리하지 ..

JAVA 2022.03.25

[Java] 인터페이스란?

인터페이스(interface)란? 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가질 수 있습니다. 하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않습니다. 그렇지만 다중 상속의 이점을 버릴수는 없기에 Java에서는 interface 를 통해 다중 상속을 지원하고 있습니다. 인터페이스란? 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다. 자바의 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함을 할 수 있습니다. 하지만 인터페이스는 오직 추상 ..

JAVA 2022.03.25
728x90