인터페이스
- 다중 상속처럼 사용할 수 있는 기능
- 추상 메소드와 상수만으로 이루어짐
접근제어자 interface 인터페이스이름{
public static final 타임 상수이름 = 값;
public abstract 반환타입 메소드이름(매개변수);
...
}
class 클래스이름 implements 인터페이스이름 {
...
}
- 내부의 모든 메서드는 public abstract 로 정의
- 내부의 모든 필드는 public static final 상수
- 동시 사용으로 다중 상속과 같은 효과를 낼 수 있다.
- 인터페이스 끼리는 다중 상속이 가능하다.
접근제어자 interface 인터페이스이름 {
...
}
접근제어자 class 클래스이름 {
...
}
class 클래스이름 extends 클래스이름 implements 인터페이스이름1, 인터페이스이름2 {
...
}
인터페이스 vs 추상클래스
추상 클래스 | 인터페이스 | |
사용 키워드 | abstract | interface |
사용 가능 변수 | 제한 없음 | static final |
사용 가능 접근자 | 제한 없음 | public |
사용 가능 메소드 | 제한 없음 | abstract, default, static, private method |
상속 키워드 | extends | implements |
다중 상속 가능 여부 | 불가능 | 가능 |
공통점
- 추상 메소드를 가지고 있어야 한다.
- 인스턴스화 할 수 없다
- 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.
- 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현해야 한다.
추상클래스를 사용해야 하는 경우
- 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복 멤버 통합을 할 때
- 멤버에 public 이외의 접근자 선언이 필요한 경우
- non-static, non-final 필드 선언이 필요한 경우
- 요구사항과 함께 구현 세부 정보의 일부 기능만 지정했을 때
- 하위 클래스가 오버라이드 하여 재정의하는 기능들을 공유하기 위한 상속 개념을 사용할 때
- 상속 관계를 타고 올라갔을 때 같은 부모 클래스가 가진 기능들을 구현해야할 경우 사용
인터페이스를 사용해야 하는 경우
- 어플리케이션의 기능을 정의해야 하지만 그 구현 방식이나 대상에 대해 추상화 할 때
- 서로 관련성이 없는 클래스들을 묶어 주고 싶을때
- 다중 상속을 통한 추상화 설계를 해야 할때
- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우
- 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용
참고
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번
inpa.tistory.com
입출력
콘솔
입출력 방식 중 콘솔 입력 방법
System.in.read();
InputStreamReader readr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
- Systme.in.read(); 의 경우 System.in.read(new byte[System.in.available()]); 을 사용하여 남아있는 데이터를 소진해주어야 함.
- InputStreamReader : 읽고자 하는 갯수만큼의 배열을 만들어 주어야 함.
- Scanner의 입력 메소드
- sc.nextByte() : byte 형 입력 및 리턴
- sc.nextShort() : short 형 입력 및 리턴
- sc.nextInt() : int 형 입력 및 리턴
- sc.nextLong() : Long 형 입력 및 리턴
- sc.nextFloat() : float 형 입력 및 리턴
- sc.nextDouble() : double 형 입력 및 리턴
- sc.nextBoolean() : boolean 형 입력 및 리턴
- sc.next() : String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽음)
- sc.nextLine() : String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
입출력 방식 중 콘솔 출력 방법
System.out.println(...);// 엔터키 있음
System.out.print(...);// 엔터키 없음
System.out.printf(”출력 서식”, 출력할 내용); // 포멧을 이용한 출력
- printf() - 지시자
- %b : boolean 형식으로 출력
- %d : 10진수(decimal) 형식으로 출력
- %o : 8진수(octal) 형식으로 출력
- %x : 16진수(hexa-decimal) 형식으로 출력
- %f : 부동 소수점 형식으로 출력
- %e : 지수 형식으로 출력
- %c : 문자(character) 형식으로 출력
- %s : String 형식으로 출력
- printf() - 플래그
- “ - ” : 왼쪽으로 정렬
- “+” : 부호출력
- “ 0 ” : 남는 자리를 0으로 채움
- “ , ” : 일정 자리수마다 구분문자 표시
- “ # ” : 8진수, 16진수 표시시 접두사 포함 등 출력형태 보완
- “\n” : 줄 바꿈
System.out.printf("%5d\\n", 123); // " 123"
System.out.printf("%-5d\\n", 123); // "123 "
System.out.printf("%5d\\n", 1234); // " 1234"
System.out.printf("%5d\\n", 123); // "12345"
System.out.printf("%.2f\\n", 1.12345f); // "1.12"
System.out.printf("%.2f\\n", 1.12645f); // "1.13"
파일
입출력 방식 중 파일로부터 출력 하는 방법
BufferedReader br = new BufferedReader(new FileReader("읽어올 파일명"));
while(true){
Stirng line = br.readLine();
if(line == null){
break;
}
System.out.println(line);
}
br.close();
입출력 방식 중 파일로 출력하는 방법
FileOutputStream ...
FileWriter fw = new FileWriter("파일명");
PrintWriter pw = new PrinterWriter("파일명");
fw.close();
pw.close();
- FileWriter로 이어 쓰기 하고 싶다면 FileWriter fw = new FileWriter("파일 명", true); 로 작성하면 됨.
- PrintWriter로 이어 쓰고 싶다면 PrintWriter pw = new PrinterWriter("new FileWriter("파일 명", true)");처럼 FileWriter를 넣어줘야함.
- .close()로 종료해주어야 함.
'TIL' 카테고리의 다른 글
241106 TIL 운영체제 Thread (5) | 2024.11.06 |
---|---|
241008-TIL 자바스크립트, 예외처리, 컬렉션, 람다식 (5) | 2024.10.08 |
241004-TIL Sass,자바기초(오버로딩,접근 제어자, static, 상속, 오버라이딩, 추상클래스) (1) | 2024.10.04 |
241003 - Today I Learn (5) | 2024.10.03 |
TIL-240412 브랜치 관리 전략 (1) | 2024.04.12 |