목록Java/자바 기본 문법 (68)
가자미의 개발이야기
Comparable : 기본 정렬기준을 구현하는데 사용 Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용 public interface Comparator { int compare(Object o1, Object o2); //o1과 o2를 비교 boolean equals(Object obj); } public interface Comparable { int compareTo(Object o); //객체 자신(this)와 o를 비교 } Comparable을 구현한 클래스는 정렬이 가능하다. Comparable은 어떤 클래스의 인스턴스들이 서로 비교 가능함을 의미 Comparator는 임의의 오브젝트들의 비교 기준을 구현.
Iterator : 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스 ListIterator : Iterator에 양방향 조회기능추가(List를 구현한 경우에만 사용가능) List list = new ArrayList(); Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } Map의 경우 Iterator가 구현되어 있지 않아 keySet()이나 entrySet()을 통해 Set형태로 가져온 뒤 Iterator를 실행해야함 Map map = new HashMap(); .... Iterator it = map.entrySet().iterator();
#요약: Scanner가 close 될 때 그 안에 들어있는 underlying stream도 함께 close 가 됩니다. 이 경우 new Scanner(System.in) 로 생성했으니까 표준입력인 System.in 이 close 되는 것입니다. 다시 Scanner를 생성해도 이미 System.in은 닫혔기 때문에 에러를 일으킨다. #에러 발생 코드 public class ErroPractice{ //메뉴 동작 처리 static void input(HashMap hs) { Scanner scanner = new Scanner(System.in); //중략... scanner.close(); } public static void main(String[] args) { //중략... Scanner scan..
대학교 과제로 이런 문제가 나왔다. 8번. 실행 예와 같이 키보드로부터 배열의 크기를 입력 받아서 배열 생성, 이 곳에 1에서 100까지 범위의 정수를 램덤 삽입하고 화면 출력. 배열에는 동일한 수가 없도록 하자. 실해 예) 정수 몇개?7 57 67 34 91 81 18 31 그래서 나는 재귀함수를 활용해 풀려고 했다. import java.util.Scanner; import java.util.Random; public class Practice8 { static int[] arrayStatement(int num) { int array[] = new int[num]; return array; } static int arrayRandomGet(int[] array) { Random random = ne..
public static Set synchronizedSet(Set s) public static List synchronizedList(List list) public static Map synchronizedMap(Map m) public static Collection synchronizedCollection(Collection c) //콜렉션 인스턴스를 동기화 컬렉션 인스턴스 동기화의 예 class SyncArrayList{ public static List lst = Collection.synchronizedList(new ArrayList()); public static void main(String[] args) throws InterruptedException{ for(int i = 0; ..
쓰레드 풀 모델 : 사용가능한 쓰레드들을 쓰레드 풀에 담아두고 작업에 따라 쓰레드를 할당. (매 작업마다 쓰레드를 생성&소멸하면 리소스 낭비가 심각하기 때문.) 쓰레드 풀 활용 예시 class ExecutorsDemo{ public static void main(String[] args) { Runnable task=()->{//쓰레드에게 시킬 작업 int n1 = 10; int n2 = 20; String name = Thread.currentThread().getName(); }; ExecutorService exr = Executors.newSingleThreadExecutor();//하나씩 쓰레드를 할당 exr.submit(task);//쓰레드 풀에 작업 전달 exr.shutdown();//쓰레드..
쓰레드의 동시접근 문제. 여러 쓰레드의 작업이 순차적으로 진행되는 것이 아니고 무작위로 코어가 다른 쓰레드로 이동하는데, 이런 과정에서 작업결과가 우리가 예상한 것과 다르게 나오곤 한다. 이런 동시 접근 문제는 여러 쓰레드가 같은 메모리에 접근하거나, 같은 코드를 사용할 때 일어난다. 동시접근 문제는 쓰레드 동기화로 해결한다. 동기화(synchronized) 메소드 //synchronized에 주목! //둘 이상의 쓰레드가 접근하는 것을 막겠다는 의미 //한 클래스 내에 여러개의 synchronized 메소드가 존재하면 //하나로 취급. 즉 increment()를 한 쓰레드가 사용중이면, 다른 쓰레드가 decrement를 사용 못함. //메소드 코드량이 많아지면 성능저하를 일으킴. //메소드 코드량이 적..
현재 실행 중인 프로그램을 프로세스라고 부른다. 이 프로세스가 어떤 실행의 흐름을 만드는 최소의 단위를 쓰레드라고 한다. (프로세스는 공장이고 쓰레드는 일꾼이라고 생각하면 된다.) ex. 메인 메소드. 메인 쓰레드는 자동으로 생성되지만 다른 쓰레드는 프로그래머가 직접 생성해야 한다. 멀티쓰레딩의 장점 CPU의 사용률을 향상 자원을 보다 효율적으로 사용가능 사용자에 대한 응답성 향상 작업이 분리되어 코드가 간결 a. 쓰레드의 구현과 실행 Thread클래스를 상속 class MyThread extends Thread { public void run(){ /*작업내용*/} //Thread 클래스의 run()을 오버라이딩 } MyThread t1 = new MyThread(); //인스턴스 생성 Runnable..
IO 스트림으로 입출력을 다루면 성능 쪽에 불만족하는 경우가 생긴다. 이를 NIO 기반 입출력으로 해결한다. NIO의 채널 데이터 입출력을 위한 통로. 스트림과는 다르게 양방향으로 이동 가능. 반드시 버퍼에 연결해서 사용 채널 기반 데이터 입출력 경로 데이터-버퍼-채널-파일 NIO기반 파일 복사 예제 public static void main(String[] args) { Path src = Paths.get("src.txt"); Path dst = Paths.get("dst.txt"); //하나의 버퍼 생성 ByteBuffer buf = ByteBuffer.allocate(1024); //try에서 두 개의 채널 생성 try(FileChannel ifc = FileChannel.open(src, Sta..