TIL 05 - JAVA

eyan31·2022년 6월 18일
0

TIL

목록 보기
5/25
post-thumbnail

TIL | 06.17의 기록

Compartor 인터페이스, sort

key,value를 가지고 있는 클래스에서 value 내의 한가지 값을 기준으로 정렬하는 방법
compare(a,b) : 0-> 교환안함, 양수->교환, 음수->교환안함

  • 숫자를 오름차순으로 정렬하는 내부 클래스
class CompareNumAsc implements Comparator<MemberVO>{

		@Override
		public int compare(MemberVO v1, MemberVO v2) { //비교
		//0					   ->교환안함
		//양수 1200-1000 -> 200 -> 교환
		//음수 1000-1200 -> -200 -> 교환안함
			return (v1.getNo()<v2.getNo())? -1 : (v1.getNo()>v1.getNo())? 1 : 0 ;
			//sort:  -1(음수),0이면 놔두고 1(양수)이면 정렬
		}	
	}
  • 숫자를 내림차순으로 정렬하는 내부 클래스
 class CompareNumDesc implements Comparator<MemberVO>{//제너릭은 데이터가 담겨있는 객체명를 적는다

		@Override
		public int compare(MemberVO v1, MemberVO v2) {
			//교환하려면 양수값을 준다, 교환안하려면 음수,0
			return (v1.getNo()<v2.getNo())? 1 : (v1.getNo()>v2.getNo())? -1 : 0 ;
		} 	
	}
  • 문자열을 오름차순으로 정렬하는 내부 클래스
class CompareUsernameAsc implements Comparator<MemberVO>{

		@Override
		public int compare(MemberVO v1, MemberVO v2) {
			return v1.getUsername().compareTo(v2.getUsername()); //compareTo :String비교
		}		
	}
  • 문자열을 내림차순으로 정렬하는 내부 클래스
class CompareUsernameDesc implements Comparator<MemberVO>{ 
						//comparator 상속받아야 한다
		@Override
		public int compare(MemberVO v1, MemberVO v2) {
			//      이순신                홍길동   => 음수 (교환안함)
			return v2.getUsername().compareTo(v1.getUsername());
		}
		
	}

제너릭

제너릭을 작성안하면 기본값은 Object이 된다. Object형은 다양한 것을 대입 가능하지만 하위값을 Object에 넣었다가 다시 원래 타입으로 꺼낼 때 본래 타입으로 형변환을 해야한다.
제너릭을 사용하면 원하는 데이터, 객체 타입을 통일 가능하다.
제너릭 사용 방법 : public class ExampleGeneric<T> 클래스를 정의할때 클래스명 옆에 <>안에 임의의 기호 아무거나 작성. 그 클래스 내의 변수나 메소드를 정의할 때 데이터타입을 모두 T로 작성하면 된다.

입출력(Input.Output) java.io 패키지

입력: Input(byte), Reader(문자)
출력 : Output(byte), Writer, Print(문자열)
Buffer : 임시저장공간
Stream : 데이터가 지나가는 길

입력

  1. InputStream 클래스
    추상클래스이기 때문에 객체생성 불가능하고 메소드 오버라이딩이 필수이다.
    1byte씩 데이터를 읽어온다.
InputStream in = System.in; //객체생성
/* read() 사용
while(true) {
	int inData = in.read(); //-1 : 읽은값이 없을때
	if(inData==-1) break;
	System.out.println((char)inData); //10진수를 문자로 형변환
} */	
			
/* read(byte[] a) 사용*/
byte data[]	= new byte[10];
int cnt = in.read(data); //cnt -> 읽어낸 byte수 리턴 (엔터는 2바이트)
System.out.println("cnt->"+cnt);
System.out.println("text->"+ new String(data,0,cnt-2)); //바이트배열을 문자로 리턴(리턴범위지정가능)
//비어있는 배열은 null(0)값으로 리턴
  1. InputStreamReader
    문자 단위로 데이터 읽어오는 클래스이다.
InputStreamReader isr = new InputStreamReader(System.in); //객체생성
char[] inData = new char[10];
int cnt = isr.read(inData);
System.out.println("cnt->"+cnt);
System.out.println(new String(inData,0,cnt));
System.out.println(String.valueOf(inData,0,cnt)); //char배열을 문자열로 변환

나머지 사용법은 InputStream과 동일하다.

  1. BufferedReader
    버퍼에 입력문자를 저장한 후 1줄씩 읽어올 수 있다.(엔터까지 읽어옴)
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
			
// 읽은 데이터가 없을 때 null을 리턴해준다.
String str = br.readLine(); //한줄씩 읽어온다
System.out.println(str);

파일 읽어오기(File 클래스 이용)

  • File 클래스 : 드라이브, 폴더, 파일에 관한 정보를 사용하기 위해서는 File객체를 생성하여야 한다.
// File(String pathname)
File f1 = new File("C://"); 
File f2 = new File("C://dev2/student");
File f3 = new File("C://dev/Test.java");

// File(File parent, String child)
File f4 = new File(f2, "Test.java"); //->f3과 같은 파일을 객체로 만든것

// File(String parent, String child)
File f5 = new File("c:/dev","Test.java");

exists : 경로 또는 파일 존재 유무
mkdir() mkdirs() : 폴더 생성 (결과값 boolean)
createNewFile : 파일 생성
getName() : 파일명 구하기
getParent() : 드라이브명 + 폴더명 구하기
getPath() getAbsolutePath() : 드라이브명 + 폴더명 + 파일명 구하기
listRoots() : 드라이브 목록 구하기
length : 파일의 크기 구하기 (byte)
delete : 파일 삭제 (복구 불가능)

  1. FileReader
    문자 단위로 파일을 읽어오는 클래스이다.
File f = new File("C://workspaceJava/basic06_io/src/basic06_io/FileTest.java");
FileReader fr = new FileReader(f);
/*
while(true) {
	int inData = fr.read();
	if(inData==-1) break;
	System.out.print((char)inData);
} */
			
BufferedReader br = new BufferedReader(fr);
			
while(true) {
	String inData = br.readLine();
	if(inData== null) break;
	System.out.println(inData);
}
profile
터벅터벅 개발자 지망생의 하루

0개의 댓글