본문 바로가기

JAVA

(46)
[JAVA] 기초문법 - 파일입출력(2) FileInputStream객체로 한글을 읽으면 깨짐 현상이 발생한다. 이것을 InputStreamReader 보조스트림으로 해결하는 방법은 다음과 같다.(문자로 변환) FileInputStream을 InputStreamReader의 매개변수로 전달해서 객체생성. Filereader객체로 읽으면 한글깨짐이 없지만. Sysyem.in와 같은 바이트만 읽는 객체를 문자로 변환하는 경우도 있기 때문에 제공되는 보조스트림인다.(소켓에서도 사용한다.) 버퍼링기능 제공하는 스트림 파일복사 예제(버퍼사용x) 걸리는 시간 체크 많은 시간이 걸리는 것을 알 수 있다. 버퍼사용 한 파일 복사-시간체크 버퍼 보조스트림을 사용해서 복사시간이 단축된것을 알 수 있다. 데이터의 자료형을 보존하면서 읽고 쓰는 기능을 제공하는 스트..
[JAVA] 기초문법 - 파일입출력(1) 자바 입출력 자바에서 입출력은 예외처리가 필수적이다. 입출력을 동시에 하는 스트림은 없다. 입력스트림 출력스트림이 독립적으로 존재한다. 바이트 단위 읽고 쓰거나, 문자단위로 읽고 쓰거나 둘중 하나이다. 기반 스트림이거나 보조스트림이거나 둘중 하나이다. 일반적으로 입력스트림과 출력스트림이 독립적으로 존재하지만, 파일용으로 입출력을 동시에 가능하게 하는 randomacessfile이라는 클래스가 하나 존재한다. system.in.read()로 알파벳 하나를 읽을 수 있다.(단 반환형은 int형이다.)(예외처리 필수) 알파벳을 출력하려면 char형으로 형변환을 해줘야한다. sysyem.in은 한 바이트씩 읽는다. 여러 알파벳 입력 받기 엔터가 눌릴때까지 입력을 받고 한글자씩 출력 하는데 개행 없이 출력하는 예..
[JAVA] 기초문법 - 예외처리 예외처리 자바 안정성을 추구하는 언어이다. 즉, 여러가지 오류에 대해 핸들링을 할 수 있도록 지원한다. 즉, 예외처리를 이용하여 프로그램이 비정상종료되는 것을 막고, 로그를 남겨 원인을 파악할 수 있게 하는 프로그래밍이 필요하다. 등 무수히 많은 클래스가 존재한다. 예외처리 방법 try 구문 안에서 예외(오류)가 발생하면 catch문으로 가서 처리를 하고 그 후 프로그래머가 작성한 로직을 그대로 실행. 그대로 실행하기 때문에 마지막 end 글자가 출력됨을 알 수 있다. 예제에서는 예외 클래스에 toString 메서드를 출력한 것. 논리적으로 프로그래머가 예외처리를 할 수 있도록 코딩 해야함.(프로그램이 비정상 종료가 되지 않음.) catch 구문 다음에 finally 구문을 추가하면 반드시 finally..
[JAVA] 기초문법 - 스트림 배열이나 컬렉션 등을 대상으로 효율적으로 연산 및 소팅을 할 수 있는 객체(일관성 있는 연산을 처리) ex) 배열에서 큰수 구하기 합 구하기, 어레이리스트에서 큰수 구하기 합 구하기 등 (자료에 상관없이 동일한 연산을 제공) 배열같은 자료를 변화시키지 않음. 다른 메모리를 사용하기 때문에 다른 버퍼를 사용하는데 이부분이 스트림이다. 재사용은 불가능하다.(소모) 다시 사용하기 위해서는 스트림을 다시 생성해야함. 중간의 결과를 알 수 없다.(지연연산) 사용법 자료(배열 등)을 생성후 Arrays.stream에 전달 한다. 그 후 스트림에서 제공하는 메서드를 호출해서 리턴받는다. 스트림의 재사용은 불가능하다.(소모가 되었기 때문에) 다시 스트림을 사용하기 위해서는 스트림은 재 선언 해야함. 배열이 아닌 어레이..
[JAVA] 기초문법 - 람다식 1. 인터페이스에 추상메서드 선언 2. 인터페이스 변수에 람다식으로 함수 구현.(더 큰 수 반환 예제) 인터페이스에 두가지 추상메서드가 구현될 수 없음. 하나의 인터페이스당 하나의 함수만 선언해야한다. 두개 이상 선언을 방지하기 위해 다음과 같은 @funtionalInterface를 선언하면, 인터페이스에서 컴파일 에러가 나타나 실수를 예방할 수 있다. 내부적으로 동적하는 방식 내부적으로는 익명클래스가 생성되어 호출된다. 클래스에 인터페이스를 구현하여 객체를 만들어 사용하는 방법보다 코드의양이 적고 간결하여 많이 사용한다. 총 3가지 방법이 있다. 1. 클래스에 인터페이스 구현하여 객체생성후 함수 호출. 2. 람다식 사용. 3.익명내부 클래스 사용. 람다식 사용 3가지 방법 1. 변수처럼 사용 2. 인터..
[JAVA] 기초문법 - 내부클래스 내부 클래스 클래스 내부에 있는 클래스 인스턴스 내부 클래스 인스턴스 내부 클래스 안에서 static 변수는 사용할 수 없다.(프로그램이 로드될떄 메모리에 올라가기 때문에 아직 생성되지 않은 클래스 안에서 생성이 불가능하기 때문에.) 이와 같이 아웃클래스를 먼저 생성하고 내부 클래스 인스턴스를 생성 가능한 문법도 존재한다. 정적 내부 클래스 -static 키워드 사용가능. -아웃 클래스 생성과 상관 없이 사용가능하다.(static 클래스 이기 때문에 인스턴스 생성과 상관 없이 프로그램이 로드될때 메모리에 올라가기 때문이다.) -단 아웃 클래스 멤버변수 참조가 불가능하다. 아웃클래스 생성과 상관없이 인스턴스 생성해서 사용할 수 있다. 지역 내부 클래스 클래스 안에 메서드에서 생성되는 클래스를 의미한다. 메..
[JAVA] 기초문법 - 컬렉션 프레임워크(TreeSet, HashMap, TreeMap) String 타입은 내부적으로 comparable와 comparator가 구현되어 있기 때문에 객체 비교가 가능함.(자동정렬가능) 사용자가 정의한 객체를 비교하기 위해서는 별도에 구현이 필요하다.(자동정렬을 위해) 스트링인 경우 스트링 내부에 compareto가 구현되어 있기 때문에 해당 함수를 호출하여 비교해서 오름차순 내림차순 결정가능. 리턴이 양수면 오름차순 정렬 리턴이 음수면 내림차순 정렬 comparator 인터페이스을 구현하는 경우에는 compare()을 구현해야함. 내림차순 정렬 보통 두 인터페이스 중 하나만 구현해서 사용한다. 기존에 있는 정렬방식을 바꾸어 사용할때 comparator을 구현한다. 기본적으로 comparable을 많이 사용한다. 파이썬 딕셔너리와 비슷한 개념. 해시맵 사용법..
[JAVA] 기초문법 - 컬렉션 프레임워크(stack,queue,hashset) 어레이 리스트를 이용한 스텍 구현 테스트 코드 어레이리스트를 이용한 큐 구현 hasnext()는 다음 반환할 데이터가 있는지 체크하느 것. next()는 데이터를 가져오는 것. get이 제공되지 않기 떄문에 iterator를 사용해야함. id 값으로 객체가 같은지 판단하기 위해서는 member클래스에서 equlas()와 hashcode()를 오버라이딩 하여야한다. string 같은 클래스들은 기본적으로 구현이 되어 있다. 사용자가 직접만드는 클래스인 경우에 필요에 따라 오버라이딩 해야하야한다. 오버라이딩 하지 않으면, 아이디 값이 같아도 다른 객체로 판별한다.