728x90
반응형
프로그래머스 자바 입문 강의를 학습 목적으로 정리하여 포스팅합니다.
1. 인터페이스 만들기
인터페이스란 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시스템
- 추상 메소드와 상수만 정의 가능
public interface TV{
public static final int MAX_VOLUME = 100;
public static final int MIN_VOLUME = 0;
public abstract void turnOn();
public abstract void turnOff();
public abstract void changeVolume(int volume);
public abstract void changeChannel(int channel);
}
2. 인터페이스 사용하기
- 인터페이스가 가지고 있는 메소드를 하나라도 구현하지 않는다면 해당 클래스는 추상클래스가 됨
- 추상클래스는 인스턴스를 만들 수 없음
// 인터페이스를 구현하는 클래스에서 implements 키워드 이용
public class LedTV implements TV{
@Override
public void turnOn(){
System.out.println("켜다");
}
@Override
public void turnOff(){
System.out.println("끄다");
}
@Override
public void changeVolume(int value){
System.out.println(value + "로 볼륨조정하다.");
}
@Override
public void changeChannel(int number){
System.out.println(number + "로 채널조정하다.");
}
}
- 참조변수의 타입으로 인터페이스 사용 가능
- 인터페이스가 가지고 있는 메소드만 사용 가능
- LcdTV처럼 동일한 인터페이스를 여러 개 구현 가능
- "동일한 인터페이스 구현" == "클래스 사용법이 같다"
public class LedTvExam{
public static void main(String args[]){
TV tv = new LedTV(); // TV tv = new LcdTV
tv.on();
tv.volume(50);
tv.channel(6);
tv.off();
}
}
3. 인터페이스의 default method
JAVA8 이후 interface에 추상메소드 뿐만 아니라
default 메소드와 static 메소드까지 구현할 수 있게 되었다.
default 메소드
- 인터페이스가 default 키워드로 선언되면 메소드를 구현할 수 있고 이를 구현하는 클래스는 default 메소드를 오버라이딩 할 수 있다
- 인터페이스가 변경이 되면, 인터페이스를 구현하는 모든 클래스들이 해당 메소드를 구현해야 하는 문제 해결
static 메소드
- 간단한 기능을 가진 유틸리티성 인터페이스 생성
// 인터페이스 정의
public interface Calculator {
public int plus(int i, int j);
public int multiple(int i, int j);
// default로 선언하여 메소드 구현 가능
default int exec(int i, int j){
return i + j;
}
public static int exec2(int i, int j){ //static 메소드
return i * j;
}
}
// 인터페이스를 구현한 클래스
// Calculator 인터페이스를 구현한 MyCalculator 클래스
public class MyCalculator implements Calculator{
@Override
public int plus(int i, int j){
return i + j;
}
@Override
public int multiple(int i, int j){
return i * j;
}
}
// 클래스 사용
// 인터페이스에서 정의한 static메소드는 반드시 인터페이스명.메소드 형식으로 호출해야함
public class MyCalculatorExam{
public static void main(String[] args){
Calculator cla = new MyCalculator();
int value = cal.exec(5, 10);
System.out.println(value);
// static 메소드 호출
int value2 = Calculator.exec2(5, 10);
System.out.println(value2)
}
}
4. 내부클래스
내부 클래스란 클래스 안에 선언된 클래스
- 인스턴스(중첩) 클래스 : 필드를 선언하는 위치에 선언되는 경우
// 인스턴스 클래스 예
public class InnerExam1{
// 인스턴스 클래스
class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
// 인스턴스 클래스 사용
InnerExam1 t = new InnerExam1();
InnerExam1.Cal cal = t.new Cal();
cal.plus();
System.out.println(cal.value);
}
}
- static(정적 중첩) 클래스 : 내부 클래스가 static으로 정의된 경우
// static 클래스 예
public class InnerExam2{
// static 클래스
static class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
// static 클래스 사용
InnerExam2.Cal cal = new InnerExam2.Cal();
cal.plus();
System.out.println(cal.value);
}
}
static이기 때문에 바깥 인스턴스를 생성하고 접근하는 것이 아닌 바로 접근이 가능하다.
- 지역(지역 중첩) 클래스 : 메소드 안에 클래스를 선언한 경우
// 지역 클래스 예
public class InnerExam3{
// 지역 클래스
public void exec(){
class Cal{
int value = 0;
public void plus(){
value++;
}
}
//지역 클래스 사용
Cal cal = new Cal();
cal.plus();
System.out.println(cal.value);
}
public static void main(String args[]){
InnerExam3 t = new InnerExam3();
t.exec();
}
}
- 익명 클래스
5. 익명 클래스
// 익명 클래스 예
// 추상 클래스 Action
public abstract class Action{
public abstract void exec();
}
/*
추상 클래스 Action을 상속받은 클래스 MyAction
public class MyAction extends Action{
public void exec(){
System.out.println("exec");
}
}
MyAction을 사용하는 클래스 ActionExam
public class ActionExam{
public static void main(String args[]){
Action action = new MyAction();
action.exec();
}
}
*/
// MyAction을 사용하지 않고 Action을 상속받는 익명클래스를 만들어서 사용하도록 수정
public class ActionExam{
public static void main(String args[]){
// 익명 클래스
Action action = new Action(){
@Override
public void exec(){
System.out.println("exec");
}
};
action.exec();
}
}
- 생성자 다음에 중괄호 열고 닫고가 나오면, 해당 생성자 이름에 해당하는 클래스를 상속받는 이름없는 객체를 만든다는 뜻
- 괄호 안에는 메소드를 구현하거나 추가 가능. 이렇게 생성된 이름 없는 객체를 action이라는 참조변수가 참조하도록 하고, exec() 메소드를 호출
- 익명 클래스를 만드는 이유는 Action을 상속받는 클래스를 만들 필요가 없을 경우
- Action을 상속받는 클래스가 해당 클래스에서만 사용되고 다른 클래스에서는 사용되지 않는 경우
728x90
반응형
'JAVA > [프로그래머스] 자바 강의' 카테고리의 다른 글
[프로그래머스] 자바 중급 강의 part1. Object 클래스 (0) | 2023.01.29 |
---|---|
[프로그래머스] 자바 입문 강의 part9. 예외처리 (0) | 2023.01.16 |
[프로그래머스] 자바 입문 강의 part7. 상속 (0) | 2023.01.16 |
[프로그래머스] 자바 입문 강의 part6. 클래스 다듬기 (1) | 2023.01.16 |
[프로그래머스] 자바 입문 강의 part5. 클래스와 객체 (1) | 2023.01.16 |