억대 연봉을 위한 인간수업
반응형
article thumbnail
[Java] Synchronized 동기화 예제
Develop/Java 2023. 5. 14. 20:50

멀티 스레드를 잘 사용하기 위해선 동기화 문제를 해결해야 한다. Java에선 멀티 스레드를 지원하기 위한 구현체를 제공하는데 그 중 Synchronized를 사용하여 동기화와 Critical Section을 사용해보자. 멀티스레드의 동기화를 사용하지 않을 경우 멀티스레드를 구현하는 데 동기화를 사용하지 않는 예제 코드는 아래와 같다. Thread를 두 개 만들어 멀티 스레드를 구현한 다음, CountCheck의 더하기를 멀티스레드로 실행한다. Main package org.example; public class Main { public static void main(String[] args) { TaskRunnuble taskR = new TaskRunnuble(); Thread th1 = new Thr..

[Java] Synchronized VS Reentrant 차이
Develop/Java 2023. 5. 14. 15:47

자바는 stack, heap, static 이라는 3개의 메모리 영역을 가지고 있다. 자바 멀티 스레드 환경은 스레드들끼리 static, heap영역을 공유하기 때문에 공유 자원에 대한 동기화 문제를 신경 써야 한다. 자바는 java.util.concurrent.lock 패키지를 통해 Lock 외의 직접 동기화 구현이 가능한 lock 구현제를 제공하는데, 여기에 Synchronized와 Reentrant 등의 클래스가 존재한다. 이 둘의 차이점은 아래와 같다. synchronized와 Reentrant 차이 Synchronized 현재 데이터를 사용하고 있는 해당 스레드를 제외한 나머지 스레드들이 데이터에 접근 불가하도록 하는 개념 자바에서 스레드 동기화 시 사용하는 대표적인 기법 synchronized..

article thumbnail
[Java] Thread란?
Develop/Java 2023. 5. 14. 14:24

Process & Thread & Fork Process 프로세스란? cpu에 의해 메모리에 올라가 실행 중인 프로그램 메모리 공간을 포함한 독립적인 실행 공간을 갖는다. JVM(java virtual Machine)은 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원한다. Thread 쓰레드란? 프로세스의 자원을 이용해 실제 작업을 수행하는 주체 java에서는 JVM에 의해 관리된다. 프로세스 안에서 한 개 이상의 쓰레드가 작업을 하는데, 1개면 단일 쓰레드, 2개 이상이면 멀티 쓰레드라 한다. 스택을 제외한 프로세스의 모든 섹션을 공유하는 경량 프로세스 thread는 fork의 비효율성을 극복하기 위해 사용 fork 프로세스를 복제하는 것으로 새로운 프로세스를 만드는 ..

article thumbnail
[Github]새 리포지토리 생성 후 업로드 방법
Develop/Git 2023. 5. 8. 00:30

github에서 [New repository] 클릭 생성한 리포지토리의 URL 복사 터미널에서 아래 명령어 입력 1. git init 2. git add . git commit -m "아무거나" git remote add origin [복사한 git URL] git remote -v git push -f origin [브런치명, 주로 master나 main] 만약 push에서 에러가 발생하면? 브런치 명을 git에서 확인해봅시다. git에서 [branch]를 클릭 왼쪽에 main이라 써있는게 브런치 이름입니다. 마음에 안들면 오른쪽에 연필아이콘으로 수정도 가능합니다.

article thumbnail
[Git] gitignore란? : 원하지 않는 파일이 git에 올라갈 때
Develop/Git 2023. 5. 7. 23:57

코드를 git으로 commit 하다 보면 보안상 위험한 파일이나 원하지 않는 파일이 깃에 업로드될 때가 있다. 이럴 때 업로드하지 않을 파일을 gitignore로 지정해서 원하는 파일만 업로드하는 것이 가능하다. .gitignore 위치 .gitignore는 깃에 업로드 할 디렉토리의 최상단에 위치하면 된다. -> git init을 한 파일에 위치하면 됨 .gitignore 사용법 위의 링크 외에 업로드를 원치 않는 파일을 직접 지정하는 방법은 다음과 같다. - #은 주석을 의미 - 디렉터리 끝은 /를 사용해 표현 - !는 예외 처리 시 사용 특정 파일 하나만 지정할 경우 filename.txt 특정 디렉터리의 존재하는 파일하나를 지정할 경우 디렉터리명/filename.txt 특정 디렉터리 전체를 지정할..

[intellij] gradle 다른 프로젝트 참조(클래스 참조방법)
Develop/Java 2023. 5. 1. 21:39

SDK 1.8은 compile 명령어대신 implementation을 사용 build.gradle 의 dependencies 에서 lombok 사용할 때 버전을 꼭 입력하자! Gradle 5.0이상부터는 롬복 사용시 버전을 입력하지 않으면 에러남 dependencies { implementation 'org.projectlombok:lombok:1.18.10' annotationProcessor 'org.projectlombok:lombok:1.18.10' } 다른 프로젝트의 클래스를 참조할 일이 발생하는 경우 예를들어 A프로젝트 에서 B프로젝트의 클래스를 갖다 쓸 경우, A 프로젝트의 build.gradle에서 아래처럼 의존성을 추가해 줘야한다. dependencies { implementation p..

객체지향 : 상속성, 은닉성, 다형성 이란?
Develop/Backend 2023. 5. 1. 01:04

상속성(Inheritance) 상속(물려받는것)이다. 클래스 생성 시 특정 클래스의 값을 물려받아 사용한다 값을 물려주는 클래스 = 보무 클래스(parent) 값을 물려받는 클래스 = 자식 클래스(child) 자식 클래스들이 중복으로 사용하는 값들을 부모 클래스에서 만들어서 중복 제거가 가능하다. 2명 이상의 부모에게 상속받는것은 불가능하나, 한 부모가 여러 자식에게 상속하는 것은 가능하다. 상속시 메모리 크기 : 부모 클래스 + 자식 클래스의 메모리 크기이다 상속은 extends 키워드를 사용하여 상속받는다. public class 자식클래스 extends 부모클래스{ ... } 은닉성(Data Hiding) 캡슐화(Encapsulation)라고도 한다. 개념적으로데이터를 감싸서 외부에 노출되지 않게 ..

article thumbnail
[IntelliJ] Sub project(Multi Module) 구성 방법
Develop/Java 2023. 4. 3. 00:39

1. IntelliJ 의 Root 가 될 새 프로젝트 생성 기존에 있던 src 폴더는 사용하지 않으니 삭제해도 됨 2. File -> new ->Module 클릭 -> 생성할 모듈의 이름 작성 후, Language, Build syste, JDK 버전 확인 후 생성 필요한 모듈 만큼 생성 3. settings.gradle 파일에 include '모듈명'을 입력하여, 새로 추가한 모듈 이름 추가 4. build.gradle에서 공통으로 적용할 내용 수정

롬복(Lombok) 이란?
Develop/Java 2023. 4. 2. 15:01

Java를 공부하려고 코드를 보다 보면 @Override 처럼 @에 뭔가 쓰여 있는 걸 매우 자주 볼 수 있다. @는 자바에서 사용하는 라이브러리며 롬복(Lombok)이라 한다. 롬복(Lombok)이란? 반복 메소드 작성 코드를 줄여주는 라이브러리! 그러니까 반복되는 코드를 줄여주는 역할로, 코드 다이어트 라이브러리라고 부른다. 롬복의 특징 여러 가지 @어노테이션 제공 컴파일 과정에서 자동으로 개발자가 원하는 메소드를 생성/주입 방식으로 동작하는 라이브러리 이런 API를 사용하기 위해선 롬복 라이브러리 파일을 추가해줘야 한다. 클래스 등에 반복되는 getter, setter, toString 등 메소드를 자동으로 만들어주는 기능 Lombok 롬복의 장점 복잡하고 반복되는 코드를 자동 생성하도록 하여 생산..

반응형