Java 11

[Java] 럭키 스트레이트

Java로 풀어보는 간단한 백준 문제 풀이 18406번 럭키 스트레이트 문제입니다. 문제 요약 N이라는 점수가 주어질 때, 반으로 나눈 첫번째 자릿수의 합과 나머지 자릿수의 합이 동일해야 합니다. 여기서 저는 N이라는 숫자를 받아서, 첫번째 요소와 두번째 요소로 나누어보고자 했습니다. 그러기 위해서 문자열로 변환하고 반으로 나누어 각각의 배열 요소의 합을 구하는 것을 떠올렸습니다. 점수 N이 주어지고, 이를 반으로 쪼개어 첫번째 요소의 자릿수 합과 두번째 요소 자릿수 합이 일치하면 “LUCKY”, 아니면 “READY” 출력한다. 코드로 살펴보기. 백준에서 코드를 입력할 때, Java의 경우에는 Scanner 패키지를 사용해서 입력값을 받도록 만들어줘야 합니다. 1. 먼저 해당 점수를 Scanner로 입력..

[Java] 서울에서 김서방 찾기

김서방은 x에 있다를 찾습니다. 이 문제는 다시 해석해보면, seul이라는 String 배열에서 "Kim"이라는 성분의 위치(인덱스)값을 찾으면 되는 간단한 문제입니다. class Solution { public String solution(String[] seoul) { String answer = ""; for(int i = 0 ; i < seoul.length ; i++){ if(seoul[i].equals("Kim")){ answer = "김서방은 " + i + "에 있다"; } } return answer; } } 그래서 저는 for문을 활용해서 seoul 배열의 성분의 수만큼 반복해서 성분 중에 "Kim"이 있는 경우의 인덱스 값을 answer에 넣어 반환시켰습니다. 문자열을 반환해야 하므로,..

[Java] 스트림 (Stream)

1. 스트림이란? 컬렉션이나 배열의 요소를 반복해서 처리하는 하나의 방식입니다. 컬렉션에 .stream() 메소드가 있어서 컬렉션을 스트림형식으로 변경해서 사용 가능합니다. 2. 스트림 선언 컬렉션 list => Stream typeStream = list.stream(); 3. 스트림의 forEach 람다식을 활용합니다. 컬렉션 요소 하나씩 담는 변수명을 아무거나 지정합니다. 내부에는 처리할 내용이 한 줄이면, 중괄호{} 없이 작성하고, 두 줄 이상이면 중괄호{} 내에 작성합니다. typeStream.forEach(컬렉션 요소 하나 담은 변수명 -> {처리할 내용}); 내부반복자로, Iterator보다 빠른 처리속도를 가지며, 람다식으로 다양한 작업이 가능합니다. 파이프 라인 혹은 체이닝 기법으로 중간..

[Java] 멀티스레드

Thread(스레드) - 영어 사전으로는 실, 흐름 등을 의미합니다. - 프로그램의 흐름으로 생각해볼 수 있습니다. - OS는 프로그램 하나를 처리할 때 프로세스라는 단위로 처리합니다. 멀티태스킹 멀티스레드 프로그램을 동시에 여러 개 사용할 때 프로세스가 각각의 프로그램에 하나씩 배정되어 멀티 프로세스로 처리합니다. 프로그램의 내부에서 멀티태스킹이 이루어질 때 사용. - 멀티태스킹 ≠ 멀티프로세스? 1) 하나의 프로긂이 동시에 두 작업을 합니다. 2) 단일 프로세스만 할당이 되고, 두 작업을 동시에 진행 가능하게 해주는 개념은? "멀티 스레드" 프로세스 vs 스레드 프로세스 스레드 여러 개가 독립적으로 존재합니다. 프로세스 내에 포함되어 있습니다. 하나가 문제되어도 다른 프로그램에 영향을 주지 않습니다...

[Java] 상수의 할당

☑️하나만 할당 상수는 선언시 모든 상수가 동일한 타입을 가져야 합니다. 지정된 상수 값의 타입이 있다면, 변수를 생성할 때 아래처럼 생성할 수 있습니다. private static final + 정해진 타입 + 변수명; 기본 생성자를 하나 추가해서, 위에서 만든 변수에 호출된 상수의 값을 대입합니다. 변수가 private로 선언되므로, 접근하려면 getter 와 setter를 사용해야합니다. 값의 할당은 상수명(모두 동일한 타입을 갖는 상수값) 의 형식으로 수행됩니다. 상수명1(상수값), 상수명2(상수값), ... ☑️ 여러개 할당 여러개 상수값 중 첫째 상수와 나머지 상수는 각각의 상수값 수가 동일해야 합니다. 상수값이 선언된 위치별로 타입을 다르게 하지만, 같은 위치의 상수는 모두 같은 타입을 가져..

[Java] enum 열거형 정리

Enum 열거형? 1) 이넘(enum)은 열거형을 의미합니다. 상수를 모아서 클래스같이 만들어주는 멋진 기능입니다. 상수가 가지는 특징이 값이 한번 정해지면 변하지 않는 것입니다. 따라서, 열거형에 있는 상수도 값의 변경이 불가능합니다. 2) 인터페이스와 클래스의 중간 단계 형태를 가집니다. 인터페이스 : 추상자료형으로 구현할 동작을 지정합니다. 클래스 : 객체들을 모은 설계도이고, 실제 구현이 이루어집니다. 3) 객체처럼 선언하고 사용가능합니다. 4) 열거형을 사용하지 않는다면? - 관련된 상수를 하나씩 모두 정의해야하고, 사용하더라도 Value로서 역할만 합니다. - 가령 1년에 속한 월 이름에 대해 상수로 값을 넣어준다고 하면, 아래와 같이 코드를 작성합니다. - 번거롭고 불편합니다. public ..

[Java] Collections

많은 양의 데이터 혹은 데이터 그룹에 대해서 표준화된 프로그래밍 방식을 제공해주는 클래스의 집합 다양한 종류의 데이터들을 다룰 수 있게 클래스를 제공해줍니다. (List, Map, Set 등) 핵심 인터페이스 1. List : 순서가 있는 데이터의 집합입니다. 데이터의 중복을 허용합니다. ArrayList, LinkedList, Vector(구버전 원형), Stack 등이 있습니다. 2. Map : Key와 Value의 쌍으로 구성된 데이터의 집합입니다. Key의 중복이 허용되지 않습니다. Value는 중복이 가능합니다. HashMap, HashTable, TreeMap 등이 있습니다. 3. Set : 순서도 없지만 Value의 중복을 허용하지 않는 데이터의 집합입니다. HashSet, TreeSet 등..

[Java] 인스턴스화

"인스턴스화란 무엇인가?" 설계도에 대한 부품을 만들어주는 작업입니다. new + 생성자 형태로 만들 수 있습니다. 생성자도 메소드 중 하나이며, 메소드 오버로딩을 통해 다양한 생성자를 정의할 수 있습니다. 생성자의 명칭은 클래스명과 동일해야 하고, 이를 제외한 메소드는 클래스명과 달라야 합니다. 같으면 에러가 발생합니다. 또한, 생성자는 기본생성자와 매개변수가 있는 생성자로 나누어집니다. 1. 기본생성자 Bird bird = new Bird(); 매개변수가 없는 생성자가 기본생성자이고, 따로 정의하지 않아도 바로 사용할 수 있습니다. 2. 매개변수가 있는 생성자 public 클래스명(타입 매개변수1, 타입 매개변수2, ...) { //매개변수로 멤버변수를 초기화 } 생성자는 객체를 만들고 멤버변수를 초..

[Java] 클래스와 상속

클래스 (class) 클래스는 설계도입니다. 자바는 객체지향언어로, 설계도를 잘 만들고, 그대로 부품을 만들고 조립해서 프로그램을 만듭니다. 그러나 이걸 실질적으로 사용하는 데에는 약간의 어려움이 있습니다. 이해를 위해서는 직접 만들어보는게 좋았습니다. 1. Animal 클래스 만들기 이 클래스에는 멤버변수로 age, size, legCnt, hasWing을 만들었습니다. 부모클래스로 생성하고, 하위 클래스(자식클래스)도 만듭니다. public class Animal { public int age; public int size; public int legCnt; public boolean hasWing; public Animal() { } public Animal(int age, int size, int..

[Java] Unhandled exception type IOException

Java 컴파일 에러1. IOException 주로 System.in.read(); 메서드를 사용하면 나타나는 에러이다. Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type IOException at javaclass.main(javaclass.java:9) 이를 수정하는 방법은 다음과 같다. 1. 예외허용 라이브러리 추가 java.io.IOException 라이브러리를 추가 throws IOException import java.io.IOException; public class javaclass { public static void main(String[] args) thr..