자바 34

[자바의 정석] CH14 람다와 스트림

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH14. 람다와 스트림람다는 JDK 1.8부터 도입되었으며, 람다식의 도입으로 자바는 객체지향 언어임과 동시에 함수형 프로그래밍의 기능을 일부 갖춘 언어로 발전하였습니다.더보기함수형 언어란?함수형 언어는 함수를 중심으로 프로그램을 구성하는 프로그래밍 언어이며 다음과 같은 장점을 갖고 있습니다:테스트하기 쉽다.상태 공유를 안 하기 때문에 동시성/병렬 처리에 유리하다.재사용성과 추상화에 강하다.버그 발생 확률이 감소한다.람다식(Lambda expression)은 간단히 말해 메서드를 하나의 식으로 표한한 것입니다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다.메서드를 람다식으로 표..

[자바의 정석] CH13 쓰레드 (2)

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH13. 쓰레드(Thread) (2)데몬 쓰레드 (daemon thread)데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 백그라운드 쓰레드입니다. 모든 일반 쓰레드가 종료되면, 더 이상 보조 대상이 없기 때문에 JVM은 남아 있는 데몬 쓰레드를 강제 종료시키고 프로세스를 종료합니다.더보기데몬 스레드는 스스로 작업을 마치면 종료됩니다. 단지 일반 스레드가 모두 종료되면, 작업이 남아 있어도 강제 종료당할 수 있다는 점이 특징입니다.데몬 쓰레드의 예로는 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 있습니다. 데몬 쓰레드는 일반 쓰레드와 작성 방식과 실행 방식은 동일하지만, star..

[자바의 정석] CH13 쓰레드 (1)

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH13. 쓰레드(Thread) (1)프로세스(process)란 실행 중인 프로그램으로 데이터와 메모리 등의 자원과 쓰레드로 구성되어 있습니다.쓰레드란 프로세스의 자원을 이용하여 실제로 작업을 수행하는 것을 말합니다. 따라서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로레스라고 합니다. 프로세스를 공장으로 표현했을 때, 쓰레드는 일꾼이라 할 수 있습니다.싱글 쓰레드: 자원 + 일꾼멀티 쓰레드: 자원 + 일꾼 + 일꾼 + ... (여러 명의 일꾼)즉, 멀티쓰레딩이란 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것을 말하며, 장..

[백준] 5086번: 배수와 약수 (JAVA)

문제: https://www.acmicpc.net/problem/5086문제 접근문제에서 주어진 대로,, 풀었습니다!입력 받는 숫자를 차례로 num1, num2라고 하였을 때num1, num2가 둘 다 0일 경우: 종료num2를 num1으로 나눴을 때 나머지가 0인 경우(num2%num1==0): factor 출력num1을 num2로 나눴을 때 나머지가 0인 경우(num1%num2==0): multiple 출력아무것도 만족하지 않는 경우: neither 출력전체 코드import java.io.*;public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new Buffe..

[자바의 정석] CH12 지네릭스, 열거형, 애너테이션

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH12. 지네릭스, 열거형, 애너테이션제네릭(Generics)제네릭이란 클래스가 가질 타입을 미리 명시해주는 기능을 말합니다. 예를 들어, ArrayList를 생성할 때는 다음과 같이 생성할 수 있습니다.ArrayList list = new ArrayList();ArrayList를 보면 를 사용하여, ArrayList에 들어갈 요소의 타입을 명시해주었습니다. 이때 를 제네릭이라 하며, 을 넣음으로써 타입을 미리 명시해주는 것입니다.이렇게 객체의 타입을 명시해주었으므로, 명시한 타입과 다른 값을 넣을라고 하면 컴파일 에러가 발생하게 됩니다. 이런 제네릭을 사용했을 때의 장점은 다음과 같습니다:타입 안..

[자바의 정석] CH11 컬렉션 프레임워크(2)

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH11. 컬렉션 프레임워크(2)HashSetHashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션으로 특징은 다음과 같습니다.중복 요소를 허용하지 않는다:add()나 addAll()를 사용하여 새로운 요소를 추가하는데, 만약 중복된 요소를 추가하고자 한다면 이 메서드들은 false를 반환하여 중복된 요소임을 알린다.저장순서를 유지하지 않는다:따라서 HashSet에 저장된 값을 출력하면 저장한 순서와 다르게 출력될 수 있따. 만약 저장순서를 유지하고 싶다면 LinkedHashSet을 사용해야 한다.내부적으로 HashMap을 이용해 만들어져 있다.TreeSetTreeSet은 이진 검색 트리라는 자..

[백준] 10845번: 큐 (JAVA)

문제: https://www.acmicpc.net/problem/10845문제 접근이 문제는 큐를 구현하는 문제였는데, 저는 자바에서 제공하는 Queue 인터페이스 및 구현체를 사용하였습니다.우선 큐란 스택과 반대로 가장 먼저 들어온 데이터가 가장 먼저 나가는 선입선출(First In Fisrt Out) 구조입니다. 큐의 활용 예시로는 최근 사용문서기록, 인쇄작업 대기 목록 등이 있습니다. 자바에서는 큐의 가장 뒤에 있는 요소를 출력하는 함수가 없기 때문에 가장 마지막의 값을 저장하는 변수 back을 만들었습니다.큐의 경우 맨 뒤에 값이 추가되므로, push 명령어가 들어왔을 때 back에 값을 저장하였습니다.전체 코드import java.util.*;import java.io.*;public class..

[자바의 정석] CH11 컬렉션 프레임워크(1)

자바의 정석 책을 공부하고 정리한 글입니다!혹시라도 틀린 부분이 있다면 친절하게 알려주세요. 감사합니다!CH11. 컬렉션 프레임워크(1)컬렉션 프레임워크란 컬렉션을 저장하는 클래스들을 표준화한 설계를 의미합니다.컬렉션(collection): 여러 객체를 모아 놓은 것프레임워크(framework): 표준화된 프로그램 방식컬렉션 프레임워크의 핵심 인터페이스는 다음과 같습니다:List순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. 구현 클래스로는 ArrayList, LinkedList, Stack, Vector 등이 있다.Set순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다. 구현 클래스로는 HashSet, TreeSet 등이 있다.Map키(key):값(value)의 쌍으로 이..

[백준] 10773번: 제로 (JAVA)

문제: https://www.acmicpc.net/problem/10773문제 접근스택에 있는 데이터의 합을 answer이라 할 때, 문제에서 알 수 있는 것은 다음과 같습니다:0이 아닌 수가 들어온 경우: 스택에 넣으며(push), answer에 더한다.0이 들어온 경우: 가장 최근에 넣은 값을 빼며(pop), answer에서도 뺀다.저 같은 경우에는 알고리즘 별로 풀기에서 찾은 문제라, 스택을 이용하여 푸는 문제임을 바로 알았습니다. 하지만 혹시라도 코딩테스트를 풀 때 "가장 최근에 넣은 값을 뺀다." 라는 문장이 있으면 스택을 사용해야겠구나! 라고 생각하시면 될 거 같습니다.전체 코드import java.util.*;import java.io.*;public class Main { public..

[백준] 24264번: 알고리즘 수업 - 알고리즘의 수행 시간 3 (JAVA)

문제: https://www.acmicpc.net/problem/24264문제 접근MenOfPassion에 입력값을 넣어 수행 횟수와 시간복잡도의 최고차항 차수를 구하는 문제였습니다.(혹시라도 빅오 표기법에 대해 궁금하시다면 저번 글을 참고해 주세요!) 우선, MenOfPassion 알고리즘은 다음과 같습니다.MenOfPassion(A[], n) { sum 배열과 입력값이 주어진다.sum을 0으로 초기화한다.첫 번째 for문: i를 1부터 n까지 수행 (n번)두 번째 for문: j를 1부터 n까지 수행(n번)A[i] x A[j] 와 sum을 더하여 sum에 저장한다.for문이 끝나면 sum 반환이때 실행 결과에 영향을 미치는 것은 중첩 for문입니다.i = 1 일 때, j는 1부터 n까지 수행 i ..