숑숑이의 개발일기
[Java] #18 람다식
Backend/JAVA 2023. 8. 10. 23:36

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 람다식 람다식은 객체 지향형 언어인 자바에서 함수형 프로그래밍 방식을 쓸 수 있게 해주는 문법 요소다. 자바에서 람다식은 자바 8버전부터 사용할 수 있다. 자바에서 메서드를 사용하려면 항상 클래스 객체를 먼저 생성한 후 생성한 객체로 메서드를 호출해야 한다. 그런데 이 공통 기능을 일반적인 함수처럼 독립적으로 만든 후 모든 클래스에서 공통적으로 사용할 수 있다면 훨씬 효율적일 것이다. 하지만 자바는 객체 지향 언어이므로 외부에 독립적으로 함수를 구성할 수 없다. 항상 클래스 내부에 메서드로 존재해야 하고, 메서드를 사용하기 위해서는 클래스의 객체를 먼저 생성한 후에 호출해야 한다. 이를 해결하기 위해 나온 방법이 '람다식'이다...

[Java] #17.5-6 Stack<E> 컬렉션 클래스, Queue<E> 컬렉션 인터페이스
Backend/JAVA 2023. 8. 9. 13:10

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Stack 컬렉션의 특징 Stack 컬렉션은 17장에서 다루는 5개 컬렉션 중 유일하게 클래스다. 즉, 자체적으로 객체를 생성할 수 있다. 상속 구조를 살펴보면 List 컬렉션의 구현 클래스인 Vector 클래스의 자식 클래스로 후입선출(LIFO: last in first out)자료구조를 구현한 컬렉션이다. 당연히 Vector의 모든 기능을 포함하고 있으며, 여기서 추가로 LIFO 구조를 위한 5개의 메서드가 추가됐다. 이 추가 메서드는 Stack 클래스에서 추가됐으므로 사용하려면 변수를 Stack 타입으로 선언해야 한다. Stack의 주요 메서드 구분 리턴 타입 메서드명 기능 데이터 추가 E push(E item) 매개변수의..

[JAVA] #17.4 Map<K, V> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 20. 23:44

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Map 컬렉션은 상속 구조상 List, Set와 분리되어 있다. 즉, List와 Set가 Collection 인터페이스를 상속받는 반면, Map는 별도의 인터페이스로 존재한다. Map 컬렉션의 특징 1) Key와 Value 한 쌍으로 데이터를 저장 Map 컬렉션은 Key(키)와 Value(값)의 한 쌍으로 데이터를 저장한다. 한 쌍의 데이터를 엔트리(entry)라고 하며, Map.Entry 타입으로 정의된다. Map는 데이터를 엔트리 단위로 입력받는 것이다. 2) Key : 중복 저장 불가, Value : 중복 가능 얼핏 보면 List와 비슷해 보이지만 List의 인덱스는 고정적인 반면, Map의 Key 값으로는 무엇이든 올 수..

[JAVA] #17.3 Set<E> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 19. 23:57

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Set 컬렉션의 특징 Set는 동일한 타입의 묶음이라는 특징은 그대로 갖고 있지만, 인덱스 정보를 포함하고 있지않아 집합의 개념과 같은 컬렉션이다. 인덱스 정보가 없으므로 데이터를 중복해 저장할 경우 중복된 데이터 중 특정 데이터를 지칭해 꺼낼 수 있는 방법이 없다. 따라서 동일한 데이터의 중복 저장을 허용하지 않는다. Set의 주요 메서드 Set에는 데이터의 추가, 삭제, 정보 추출, Set를 배열로 변환하는 메서드들이 포함되어 있다. 구분 리턴타입 메서드명 기능 데이터 추가 boolean add(E element) 매개변수로 입력된 원소를 리스트에 추가 boolean addAll(Collection

article thumbnail
[JAVA] #17 컬렉션 프레임워크, List<E> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 18. 23:53

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 컬렉션 프레임워크의 개념과 구조 컬렉션이란? 컬렉션(collection)은 동일한 타입을 묶어 관리하는 자료구조를 말한다. 한 컬렉션에는 동일한 타입의 데이터만 모아둘 수 있다. 컬렉션이 배열과 구분되는 가장 큰 특징은 바로 데이터의 저장 용량(capacity)을 동적으로 관리 할 수 있다는 것. 컬렉션의 저장 공간은 데이터의 개수에 따라 얼마든지 동적으로 변화할 수 있으며 컬렉션은 메모리 공간이 허용하는 한 저장 데이터 개수에 제약이 없다. 컬렉션 프레임워크란? 먼저 프레임워크(framwork)에 대해 알아보자. 일반적으로 단순히 연관된 클래스와 인터페이스들의 묶을을 라이브러리라고 한다. 프레임워크는 클래스 또는 인터페이스를 ..

[JAVA] #16 제네릭, 제네릭 클래스와 인터페이스, 제네릭 메서드
Backend/JAVA 2023. 7. 16. 18:41

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 제네릭 클래스와 제네릭 인터페이스 자바에서는 다양한 종류의 클래스와 인터페이스를 제공하며 이들을 내부 멤버에서 활용하는 클래스를 작성하고자 할 때에는 많은 가짓수의 클래스를 생성해야한다. 이러한 비효율성을 한 번에 해결하는 데 필요한 문법 요소가 바로 제네릭(generic)이다. 제네릭 없이 여러 객체를 저장하는 클래스 작성 제네릭 개념 이전의 자바 문법 지식만으로 다음의 예시 코드를 살펴보자. class Apple {} class Goods1 { private Apple apple = new Apple(); public Apple getApple() { return apple; } public Apple setApple(App..

[JAVA] #15.5 쓰레드의 상태
Backend/JAVA 2023. 7. 15. 23:54

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 쓰레드는 객체가 생성, 실행, 종료되기까지 다양한 상태를 가지며 각 쓰레드의 상태는 Thread.State 타입으로 정의되어 있다. Thread의 인스턴스 메서드 getState()를 이용해 쓰레드의 상태를 Thread.State 타입에 저장된 문자열 상숫값 중 하나로 리턴한다. Thread.State getState(); Thread.State는 enum 타입이다. 내부에 6개의 문자열 상수가 저장되어 있다. 쓰레드의 상태에 따라 특정 작업 수행시에는 아래와 코드와 같이 switch 선택 제어문을 이용한다. Thread.State state = myThread.getState(); switch (state) { case Thr..

[Java] #15.4 쓰레드의 동기화
Backend/JAVA 2023. 7. 8. 00:30

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 동기화의 개념 동기화(sychronized)는 개념적으로 가장 쉽게 표현하면 하나의 작업이 완전히 완료된 후 다른 작업을 수행하는 것을 말한다. 반대로 비동기(asynchronous)는 하나의 작업 명령 이후 완료 여부와 상관없이 바로 다른 작업 명령을 수행하는 것을 말한다. 동기화의 필요성 멀티 쓰레드를 사용할 때 왜 동기화가 필요할까? 아래의 예시 코드를 보자. class MyData { int data = 3; public void plusData() { int mydata = data;// 데이터 가져오기 try {Thread.sleep(2000);} catch(InterruptedException e) {} data =..

[Java] #15.3 쓰레드의 속성
Backend/JAVA 2023. 7. 5. 23:22

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 이제 생성한 쓰레드의 객체를 참조하거나 우선순위를 지정하는 것과 같은 쓰레드의 속성 종류와 활용하는 방법을 알아본다. 현재 쓰레드 객체 참좃값 얻어오기 Thread 클래스를 직접 정의하고 객체를 생성해 사용할 때 참조 변수를 이용해 언제든지 쓰레드 객체의 속성(이름 등)을 가져올 수 있다. 하지만 직접 쓰레드 객체를 생성했을 때가 아니라(자바의 쓰레드 풀, main 쓰레드 등) 객체를 생성할 때 참조 변수를 정의하지 않을 경우에는 new Thread().start() 객체를 참조할 수 없게 된다. 이처럼 쓰레드 객체를 참조할 수 없을때 Thread 클래스의 정적 메서드, currentThread()를 이용해 현재 쓰레드 객체의 ..

article thumbnail
[JAVA] #15.1, 15.2 쓰레드, 쓰레드의 생성 및 실행
Backend/JAVA 2023. 7. 4. 00:29

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 프로그램, 프로세스, 쓰레드 프로그램을 작성하다 보면 어쩔 수 없이 동시에 수행해야 하는 일들이 있다. 예시로 비디오 재생 프로그램을 작성시에 화면 재생과 오디오 재생을 동시에 실행해야 하는 것. 여러 개의 작업이 동시에 수행되도록 하기 위해서는 한정된 코어의 수를 갖는 CPU를 여러 개의 작업이 나눠 사용해야 하는데, 이것이 쓰레드다. 프로그램과 프로세스의 개념 프로그램, 프로세스, 쓰레드의 개념을 명확히 알기 위해서는 컴퓨터의 구조를 이해할 필요가 있다. 컴퓨터를 이루는 주요 구성 요소에는 중앙 처리 장치(CPU), 메모리(memory), 하드디스크(hard disk)가 있다. 이 중 CPU는 연산을 수행해 실제 프로그램을 ..