본문 바로가기

Language/Java

(7)
JAVA - Lambda, Stream 자바 8부터 가장 큰 변화는 함수형 프로그래밍, 람다, 스트림이 생겼다는 점이다. 함수형 프로그래밍이란 '어떻게'가 아닌 '무엇에'에 집중하는 프로그래밍 방식이다. 스트림과 for,if문의 차이로 생각하면 쉽다. 이번 블로그에서는 람다에는 무엇이 있고 어떻게 사용하는지와 Stream을 사용하는 방법에 대해서 전체적인 정리를 해보고자 한다. 람다와 함수형 인터페이스 람다란 익명 클래스를 좀더 간소화하여 사용하는 방식이다. 또한, 람다를 사용하기 위해서 함수형 인터페이스를 보통 사용하곤 한다. T : 클래스를 의미 R : 반환 값을 의미 기본적으로 import는 java.util.function 익명 클래스 new Class(){} 다음과 같은 클래스가 있다고 가정하자 아래 프로그램의 메서드는 모두 짝수를 ..
Jar 파일 만들고 사용해보자 이번 블로그에서는 자바를 활용해 Jar 파일을 만들고 사용해보는 방법에 대해서 정리해보고자 한다. 1. .java 파일 생성 예시로 두개의 클래스를 작성했다. 간단하게 계산기 클래스와 인사해주는 클래스이다. 두 클래스는 TestJar라는 같은 패키지에 위치해 있다. package TestJar; public class Calculator { public static int plus(int a, int b){ return a+b; } public static int minus(int a, int b){ return a-b; } } package TestJar; public class SayHello { public void sayHello(){ System.out.println("Hello"); } } 2..
완전탐색 재귀호출에서 전역필드에 값 추가 아래 코드를 간단하게 설명하면 프로그래머스의 피로도 문제로 완전탐색을 통해 체크해야될 리스트를 구하고 전체를 테스트해서 해결하는 문제이다. 문제를 해결 중 한가지 발견한게 있어서 기록을 하고자 한다. find 메서드에서 전역필드 final_list에 result를 추가하는 부분이 있다. 이때, 만약 final_list.add(result)를 하게 되면 참조 변수를 더하는 꼴이 되는 것이다. 즉, 삽입 시점에는 원하는 값을 넣을 수 있겠지만 프로그램이 돌면서 result의 값이 변하게 되고 해당 알고리즘은 result를 결과적으로는 비우기 때문에 빈 List가 저장된다. 따라서, 삽입시 마다 새로운 객체를 만들어서 삽입을 해야한다. final_result.add(new ArrayList(result)); ..
JAVA - BASIC 1. JAVA 기본 개념 JDK(Java kit) = Library + JRE(Java Runtime Environment, 자바 실행 환경) JAVA 5.0 : Generics, Annotations, Enumerations 추가 JAVA 8.0 : Lamda, Stream, Optional 추가 LTS : 8년동안 업데이트, 버그 수정 해주는 버전 특징 - 객체 지향 언어 (현실세계의 객체를 그대로 가져와 프로그램 작성) 절차 지향(절차를 따져 프로그램 작성) - 멀티 스레드 지원 - OS 플랫폼 독립성 (JVM을 통해 운영체제에 맞는 바이너리 코드(네이티브 코드)로 변경) - 가비지 컬렉터 지원 (사용 안되는 인스턴스 청소해 메모리 정리) - 강한 타입의 언어이기에 데이터 타입을 명확히하여 메모리 ..
JAVA - Grammar 이 블로그는 기본 적인 자바 문법이자 자주 사용되는 문법들을 정리해보았다. // (클래스의 전역 변수) private static int resultAll1 = 0; // (무한대) int inf1 = (int)1e9; int inf2 = (int)-1e9; // (숫자 - 알파벳) int test = 65; System.out.println((char) test); // A // (형변환) int -> char int num = 6; char ch = (char)(num + '0'); // (형변환) char -> int char c1 = '1'; int new_int1 = (int)c1 - 48; // 진짜 문자 int new_int2 = Character.getNumericValue(c1); // ..
JAVA - Loop(for, iterator, stream) 자바로 웹프로그래밍을 하다 보면 Map에 값 저장 후 그 값들을 반복문을 통해 읽어오는 경우가 많을 것이다. 이는 여러가지 방법이 존재하는데 한번 정리해보고자 한다. Map maps = new HashMap(); maps.put("key1", "value1"); maps.put("key2", "value2"); maps.put("key3", "value3"); // 1. For 문 사용 // key들을 불러와 key와 value 출력 for ( String key : maps.keySet() ) { System.out.println("key : " + key + " value : " + maps.get(key)); } // 2. Iterator 사용 // key들을 불러와 key와 value 출력 Ite..
JAVA - Map(HashMap, LinkedHashMap) 1. Map, HashMap, LinkedHashMap 공통적으로 모두 key-value 형태로 저장이 된다. 차이점이라기 보단 Map은 인터페이스이고 HashMap, LinkedHashMap은 Map을 상속받은 클래스이다. HashMap, LinkedHashMap은 차이가 있는데, HashMap은 입력순서를 보장하지않는다. 반대로 LinkedHashMap은 입력 순서를 보장한다. 예를 통해 한번 확인해보자. private LinkedHashMap lhm = new LinkedHashMap(); private HashMap hm = new HashMap(); lhm.put(key1, value1); lhm.put(key2, value2); lhm.put(key2, value3); hm.put(key1, ..