Programming/JAVA

자바의 정석 공부한것 요약3(Optional, Comparator을 익명클래스, 람다식으로 구현법, 인텔리제이로 커맨드라인cmd 사용법). 공부기간 : 2021-01-28 ~2021-05-17

최동훈1 2021. 12. 14. 03:06

2021-01-28

 

Optional<Integer> OptionalInt , Stream<Integer> IntStream. ,

우선, 그냥 Stream 보다 기본형 Stream 사용시,

int sum(),

OptionalDouble average()

OptionalInt max()

OptionalInt min()

, 숫자를 다루는데 편리한 메서드 들을 제공한다. 또한, 오토박싱& 언박싱으로 인한 비효율을 줄인다. max(),min() 메소드는 일반 Stream에도 정의되어 있는데, 매개변수로, Comparator을 넣어야 한다. pg.841.

 

이 기본형 스트림 들은, 반환 값으로, 일반 Optional이 아닌, OptionalInt를 사용한다.

 

2021-02-07

정렬의 기준인, Comparator 구현 하는 3가지 방법( 기존 방법,익명 클래스, 람다식)

 

기존방법:

Arrays.sort(arr,new comp());

 

class comp implements Comparator{

 

@Override

public int compare(Object o1, Object o2) {

// TODO Auto-generated method stub

if( o1 instanceof Point &&o2 instanceof Point ) {

Point p1=(Point) o1;

Point p2=(Point) o2;

return p2.value-p1.value;
}

return 0;

}

}

익명클래스 로 생성 방법:

Arrays.sort(arr, new Comparator() {

@Override

public int compare(Object o1,Object o2){

Point p1=(Point)o1;

Point p2=(Point)o2;

return p2.value-p1.value;

}

});

 

람다식으로 생성 방법:

Arrays.sort(arr, (Point p1, Point p2)-> p2.value-p1.value);

 

 

 

 

 

2021-05-14

자바 인텔리제이로 커멘드라인(cmd)로 자바 파일 실행 방법.

 

1. 본인이 실행하고자 하는 자바 파일(.java)가 있는 파일 경로를 찾아서 복사한다.

, 여기서 주의할 점은 만약 자바소스파일에 패키지가 포함되어 있다면, 가장 상위의 폴더로 cd 윈도우 단축키를 통해 이동한다.

) 만약 com.company 패키지라면, cd ../../ 단축키를 통해 가장 상위 폴더로 이동.

2.컴파일은 가장 상위 폴더에서 javac com/company/Main.java 이런 식으로 해도 되고

아니면 실제 자바 파일이 존재하는 폴더에서 javac Main.java 이렇게 해도 된다.

컴파일이 완료되면 가장 하위 폴더(.java)파일이 있는 폴더에 클래스 파일이 생성될 것이다.

 

3.클래스 파일을 실행하여 실제 자바 파일을 실행할때는 반드시 패키지를 벗어난 상위 폴더(\src)로 가서 java com.company.Main 이렇게 클래스 파일을 실행시켜야 한다.

4. 또한 커맨드 라인으로 파일명을 입력해주는 프로그램을 작성 할 시에는(args)함수 이용. 반드시 com/company/Main.java처럼 패키지경로가 포함된(자바파일이 패키지에 포함되어 있다면) 파일명르 써주면 정상적으로 동작한다.

5. 또한 컴파일 하는 자바 파일 안, 한글이 포함되어 있다면

javac 자바파일명.java encoding UTF-8

이렇게 작업한 언어로 인코딩 하여 컴파일 해줘야 한다.

 

6. 또한 커맨드라인에 파일명을 입력할 경우, 커맨드 라인이 가리키는 파일 안에 있는 경우가 아니면, 안됨. 애초에 커맨드 라인은 그 디렉토리에 대한 명령을 하는 것임.

처음 type 연산자를 사용했을때는 src 디렉토리 내에 1.txt라는 파일이 없기 때문에 파일을 찾을수 없었고, (밖의 \백준 문제풀이용 폴더에 있었음) 그것을 src 파일 내로(커맨드 라인이 가리키는 파일경로 내) 이동하니까 바로 실행됨.

 

2021-05-15

 

System클래스의 Out 메서드는 바이트기반 출력스트림인 PrintStream으로 이루어져 있음.

[바이트 기반이지만, PrintStream에 구현된 print()메서드에 의해 다양한 자료형을 출력 가능함.] 그러나 콘솔을 통해 출력하는 표준 입출력 스트림이라, 별도의 스트림 생성을 요구하지않고, 자바 어플리케이션이 실행됨과 동시에 자동으로 스트림이 생성됨.

 

여기서 구별해야 할 점은 표준 입출력이란 것은 콘솔과 자바 애플리케이션간의 연결을 뜻하는 단어이고, 어떤 형태 ex) 바이트 기반, 문자기반 등인지 가리키는 용어가 아님.

 

, 파일간 입출력, 쓰레드 간 입출력, 메모리 간 입출력, 표준 입출력(콘솔 간 입출력) 등이 함께 묶이는 분류이고,

그 전송 형태가 바이트 기반인지 문자기반인지는 별개의 분류임.

 

2021-05-17

 

어떤 클래스를 상속받은 클래스는 생성자를 호출하기 전, super()this()를 호출해야 한다. 이유는 자손클래스의 인스턴스가 생성될 때, 상속해준 조상 클래스의 인스턴스들도 같이 생성되어서 쓰여져야하기 때문이다. , 조상클래스의 인스턴스 변수들이 적절히 초기화 되어있어야 하기 때문이다.

 

내가 여태까지 간과한 부분은, 인터페이스는 인스턴스 멤버로 public static final 만 가지기 때문에, 상속할 때, 별도의 생성자 처리를 해줄 필요가 없어서 몰랐던 것이다.

내가 클래스 만들어서 상속해서 쓸 기회가 거의 없으니...