JAVA 25

[JAVA] 동시성 & Thread

프로젝트를 진행 중 좋아요를 누르는 API가 있는데 문득 동시에 여러사람이 동시에 하나의 게시글에 좋아료를 눌렀을 때 어떻게 될까?라는 의문을 가지게 되었다.. 현재 코드에서는 만약 2명의 유저가 하나의 게시글에 좋아요를 동시에 눌렀을 때 좋아요 갯수가 하나만 올라간다...! 😪 물론 좋아요갯수가 중요도가 높은 API는 아니긴 하지만 동시성에 관심을 갖고 한번 해결해보고 싶었다. 우선 동시성을 하기 전에 Thread개념에 대해 알아야한다. https://wnstjr120422.tistory.com/entry/JAVA-Thread-Runnable-Multi-Thread%EB%9E%80 [JAVA] Thread & Runnable & Multi Thread란? Thread(스레드)란? 프로세스 내에서 실행되..

JAVA 2024.03.03

JAVA_단위 테스트&통합 테스트

모든 개발자들은 프로젝트를 할 때 테스트는 반드시 필요한 필수조건이다. 테스트종류에는 위의 사진과 같이 (아래서부터)단위 테스트, 서비스 테스트, 사용자 인터페이스 테스트 총 3가지가 있다. Unit Tests(단위 테스트) 작은 컴포넌트, 하나의 기능을 하는 함수처럼 잘개 쪼개어 테스트 하는 방식 @Test public void 게시글_저장_불러오기(){ //given String title="테스트 게시글"; String content="테스트 본문"; postsRepository.save(Posts.builder() .title(title) .content(content) .author("junseck") .build()); //when List postsList=postsRepository.fin..

JAVA 2023.10.16

[JAVA] I/O스트림

I/O란? Input/Output으로 데이터를 입출력하는 것을 의미 데이터를 전달하는 방법은 다양한데 그 중에서 스트림(Stream), 버퍼(Buffer), 채널(Channel)을 기반으로 하는 I/O가 있다. Stream(스트림) 스트림은 데이터를 전달하는 통로를 의미하는데 단방향으로 밖에 데이터를 전달할 수 없다. 즉, 데이터가 들어온 순서대로 데이터를 출력하는 단방향 통로이다. 또한 데이터를 읽고 쓰기 위해 스트림을 요청하면 스트림은 해당 데이터의 작업을 수행하는 동안 다른 데이터는 스트림에 접근하지 못하고 기다리는 동기화, Blocking방식으로 동작한다. 위처럼 i값을 순서대로 하나씩 출력하는 방식을 stream방식으로 동작한다라고 한다. Buffer(버퍼) Buffer는 데이터를 임시로 한 곳..

JAVA 2023.05.23

[JAVA] 제네릭 < >

제네릭 주어진 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법 List list=new List(); 위의 코드는 제네릭사용의 장점을 보여주는 코드이다. 제네릭을 사용하는 경우에는 괄호 사이에 사용하고 싶은 타입을 입력하면 사용할 수 있다. List list=new List(); 위의 코드는 String 타입으로 list를 사용하겠다는 의미이다. ArrayList으로 선언하면 ArrayList타입의 list변수는 String타입으로 사용한다는 의미이다. ArrayList클래스는 List클래스를 상속받은 자식클래스이다. 제네릭 사용법 제네릭의 사용 방법은 다양한데 첫번째로 클래스 및 인터페이스 선언을 하는 경우에 제네릭을 사용하는 경우가 있다. 1. 클래스 ..

JAVA 2023.05.23

[JAVA] Enum(열거 타입)

Enum Enum클래스는 열거 타입클래스라고도 하며 주로 계절이나 달 처럼 정해진, 변하지 않는 값들을 하나로 묶어서 사용하고 싶을 때 사용하는 클래스 Enum타입의 데이터를 선언하기 위해서는 'enum'키워드를 이용하여야 한다. 위의 코드처럼 enum도 하나의 클래스이기 때문에 객체를 생성해주고 enum타입중에 원하는 타입을 선택하여 객체.열거타입으로 호출하게 되면 해당 타입의 값이 출력되게 된다. name()메소드 enum클래스 안에는 많은 메소드가 있는데 enum타입의 이름을 출력해주는 name()메소드가 있다. enum클래스인 Week의 값만큼 반복을 돌리면서 name()메소드를 사용하여 값을 출력하면 아래와 같이 Week클래스안에 있는 값들이 출력되게 된다. ordinal()메소드 ordinal..

JAVA 2023.05.17

[JAVA] Thread & Runnable & Multi Thread란?

Thread(스레드)란? 프로세스 내에서 실행되는 흐름의 단위 예를 들어 호랑이가 있다고 하였을 때 호랑이가 잠자는 행위를 하나의 스레드로 본다. 즉 일반적인 스레드는 동시 작업이 불가능하다. 예를 들어서 호랑이가 자면서 먹이를 먹을 수 없는 것 처럼 말이다. 위의 코드는 Thread_Class클래스가 Thread클래스를 상속받아서 생성하였다. Thread_Class클래스는 Thread클래스를 상속받아 run()이라는 Thread클래스의 메소드를 오버라이딩하여서 사용하였다. Thread클래스의 특징은 바로 start()메소드를 통해 스레드가 시작되는 특징이 있다. 위처럼 start()메소드를 호출하면 run()메소드가 실행되고 main스레드가 아닌 다른 스레드에서 실행되는 것을 확인할 수 있다. Runn..

JAVA 2023.05.03

[JAVA] 패키지&import & 접근 제어 지시자

패키지란? 쉽게 말해 클래스들의 모음집이다. 패키지를 통해서 클래스 구분이 가능 그렇다면 패키지를 사용하는 이유는 무엇일까? 바로 클래스의 고유성을 유지하기 위해서이다. 다시 말해, 서로 다른 용도의 2개의 클래스의 이름이 겹쳐서 충돌하는 경우를 방지하기 위하여 패키지를 이용하여 클래스의 고유성을 지키기 위해서이다. 위의 코드는 동일한 클래스명을 생성한 경우이다. 동일한 패키지에서 Tam이라는 클래스를 생성하면 위의 사진처럼 이미 존재한다고 컴파일러가 개발자에게 알려준다. 하지만 패키지를 이용하면 정상적으로 생성이 가능하다. 이것이 패키지를 사용하는 이유다. 위의 코드는 java1에 있는 Tam클래스를 java2패키지의 Tam1클래스에서 호출하는 코드이다. 여기서 바로 import라는 키워드가 사용된다...

JAVA 2023.04.26

[JAVA] Object클래스

Object클래스란? 모든 클래스의 최상위 클래스를 의미한다. 즉, 자바의 모든 클래스는 Object의 서브클래스가 된다. 그렇다면 Object를 상속하지 않아도 모든 클래스는 Object의 서브 클래스가 되는 걸까? 대답은 Yes이다. 개발자가 상속하지 않아도 컴파일러가 자동으로 java.lang.Object를 상속시킨다. 위처럼 Pra클래스는 Object클래스를 상속하지 않았지만 Object클래스의 메소드를 오버라이딩 할 수 있다. 그럼 우리가 자주 이용하는 Object클래스의 메소드에 대해서 설명하겠다. equals()메소드 equals()메소드는 boolean타입의 리턴타입을 가지고 있고, 두 객체가 동일한 객체면 true, 아니면 false를 반환한다. pra와 pra1 두 객체는 서로 다른 주..

JAVA 2023.04.25

[JAVA] final 키워드

final란? final키워드는 변수, 메소드, 클래스에 사용이 가능하다. final키워드가 붙으면 무언가를 제한한다는 의미가 있다. 변수에서의 final 변수에 final키워드를 붙이면 값을 수정할 수 없다는 것을 의미한다. 따라서 값을 수정할 수 없기 때문에 변수를 선언하고 반드시 초기화를 해주어야 한다. 위의 코드처럼 int형 변수x에 선언과 동시에 값을 2로 초기화를 하였는데 다음 라인에서 x값을 3으로 변경하려고 하면 컴파일러가 final키워드가 붙은 변수라서 값을 변경할 수 없다고 오류를 발생시킨다. 위의 코드는 객체변수에 final키워드가 붙은 경우이다. 객체변수는 변수의 값을 가리키는 것이 아니라 주소를 가리키기 때문에 내부 값이 변경되는 건 final키워드가 관여를 하지 못하지만 새로운 ..

JAVA 2023.04.23

[JAVA] 추상클래스란

추상클래스(abstract class)란? 우선 실체클래스란 객체를 생성할 수 있는 클래스를 의미하고 추상클래스는 이 실체클래스의 공통적인 부분을 따로 빼내서 형태를 만든 클래스를 의미 그럼 추상클래스도 객체를 생성할 수 있을까? 대답은 No이다. 이유는 추상클래스 안에 있는 메소드 내용이 아직 추상적이라 객체를 생성할 수 없기 때문이다. 추상클래스를 사용하는 이유 가장 우선적인 이유는 바로 유지보수와 재사용때문이다. 만약 예를들어 스마트폰이라는 클래스가 있고 S클래스와 A클래스가 있다고 가정하자. S클래스, A클래스 둘 다 스마트폰기능을 하는 공통적인 전화받기, 걸기, 인터넷 사용등 동일한 기능이 들어가 있다고 하자. 여기서 L클래스를 만드는 데 L클래스 또한 S, A클래스와 동일한 기능을 한다고 하였..

JAVA 2023.04.23