공부기록/Java

    System.setIn()

    코딩테스트를 연습하면서 백준 사이트를 자주 이용을 했다 항상 테스트케이스를 복사 붙혀넣기를 반복적으로 해서 사용을 했고 귀찮음은 있었지만 그렇게 불편하지는 않아 계속 이 방식으로 사용해 왔다 최근 친구와 같이 만나 문제를 푸는 도중 간단한 방법을 하나 알려주어서 사용해 봤는데 내가 지금까지 한 방식이 너무 멍청할 정도로 편한 것이어서 작성을 한다 public class Main { public static void main(String[] args) throws IOException { System.setIn(new FileInputStream("txt파일 경로")); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))..

    람다 2

    앞서 람다를 왜쓰는지 Version1부터 6까지 알아왔다 이번엔 람다를 어떻게 작성하는지 람다는 어디에 쓰이는지에 대해서 알아보겠다 람다 작성법 (파라미터) -> {람다 바디} 람다는 파라미터와 화살표 바디 이렇게 세개로 이루어져 있다 이전에 사용하던 익명 클래스를 단순화 하여 나타낸 것이다 저번 글에 Version4를 보면 사용하는 예제가 있을 것이다 기억이 나지 않는다면 아래 링크를 가서 확인해보면 되겠다 람다 사용 예제 몇가지 규칙이 있긴한데 일단 이런게 있다고 보고 몇번 사용하다보면 금방 감이 올것이다 매개 변수 타입은 생략가능 --> 추후 설명 매개 변수가 하나만 있다면 괄호 생략 가능 (user) -> user.getName().equals("userB") --> user -> user.get..

    람다

    람다란 메서들 전달 할 수 있는 함수를 단순화 한 것 그니까 코드를 더 짜기 귀찮아서 간결하게 표현하기 위해서 만들어 진 것이 람다식이다 람다를 알기 전에 도데체 어떤 코드를 간결하게 표현을 하는 것이고 덜 짜는 지에 대해 알기 위해서 가장 기초적인 자바 문법을 가지고 차례대로 개선을 해 나갈 것이다 예제에서 사용 될 모델 public class User { private String name; private int age; private Role role; } public enum Role { USER, ADMIN } private static List users; static { users = Arrays.asList( new User("userA", 10, Role.USER), new User("u..

    제네릭(2)

    제한된 타입 파라미터 타입 파라미터를 구체적으로 지정하여 제한 ex) 계산기 구현할 때 숫자만을 지정하기 위해서 매개변수로 Number로 제한 클래스 인터페이스 모두 가능 *인터페이스라고 implements사용X 오로지 extends만 사용 public class study1 { public static void main(String[] args) { System.out.println(Util.compare(10,20)); System.out.println(Util.compare("apple", "orange"));//error } } class Util{ public static boolean compare(T t1, T t2){ return Double.compare(t1.doubleValue(), ..

    제네릭(1)

    제네릭을 사용하는 이유 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있음 타입변환을 제거할 수 있음 List list = new ArrayList(); list.add("hello"); Strign str = (String) list.get(0); //List에 저장되는 요소를 String타입으로 변환하지 않아도 된다. List list = new ArrayList(); list.add("hello"); String str = list.get(0); 하나의 메소드로 여러 타입을 다룰 수 있음 public class Box{ private T t; public T get() { return t; } public void set(T t) { this.t = t; } }​ 에서 T에 wra..

    스레드(3)

    우선순위 우선순위를 직접 지정하기 위해서 setPriority()사용해서 직접 상수 혹은 Thread.MAX_PRIORITY와같은 클래스 상수 사용 Synchronized(동기화) 여러 스레드가 하나의 객체에 접근을 하려고 할 때 값의 잘못된 변경을 막기 위해서 스레드를 잠금 동기화를 설정하는 것은 인스턴스, 정적메소드 어디든 붙일 수 있다. public synchronized void method(){ //하나의 스레드만 실행가능 } public void method(){ //여러 스레드 실행가능 synchronized(공유객체){ //하나의 스레드만 실행가능 } } 스레드 상태 실행 대기 - notifyAll(), notify(), yield() : 양보 후 대기 일시정지 - sleep(long ti..

    스레드(2) - Runnable(Interface) vs Thread (Class)

    Interface 와 Class의 차이 - 다중상속이 가능하냐 불가능 하냐 정도? - 작은 프로젝트을 만드는데 있어서는 어떤 것을 사용하냐에 대해선 취향차이 일수도 있지만 큰 프로젝트에서는 여러 기능을 따로 만들어 상속받는데 있어서 클래스는 다중상속이 안되서 인터페이스가 더욱 유리 아무래도 인터페이스 사용하면 코드에 대한 재사용성?이 더 높을수도 이정도 일려나? 추가적으로 Runnable을 사용함에 있어서 클래스를 추가를 하는 것이 아니라 익명의 개체를 매개변수로 직접 넣는것은 간단한 작업을 하는 것 아니면 되도록이면 사용을 안하는 것이 좋을 것 같다.

    스레드(1) - 생성

    *멀티 태스킹 vs 멀티 스레드 멀티 태스킹 - 여러개의 프로세스를 사용하는 것 ex) 하나의 컴퓨터에서 엑셀 인터넷 카톡 등을 한번에 실행 멀티 스레드 - 하나의 프로세스에서 여러 작업을 하는 것 ex) 카톡에서 채팅치면서 사진 보내기 메인스레드 - main메소드 실행하면서 실행, 메소드 종료시 종료 - 멀티 스레드 경우 하나의 실행중인 작업 스레드가 있다면 메인 스레드 종료안됨 작업스레드 - 멀티 스레드 어플리케이션 만들경우 몇개의 작업으로 나눌지 결정 생성방법 - java.lang.Thread 클래스로부터 직접 생성 -> Runnable을 매개값으로 갖는 생성자 호출 Runnable에 run메소드를 재정의하여 실행 코드 작성 public class Task implements Runnable{ @O..