hyeonga_code

Java의 신_Chapter 13_Interface, enum 본문

Java

Java의 신_Chapter 13_Interface, enum

hyeonga 2024. 3. 28. 10:59
반응형

 

2024.03.27

 

-- SI_System Integration

---- 일정 기간 동안 시스템을 만들어주는 것

-- SM_System Maitenance

---- 시스템을 운영하고 유지 보수하는 것

---- 계속 보완하고 발전시킴

 

- 인터페이스_Interface

-- 사용자의 입장에서 내부 구현은 중요하지 않다.

-- DAO_Data Access Object 패턴

---- 데이터를 저장하는 저장소에서 원하는 값을 요청하고 응답을 받는다

 

-- 인터페이스와 abstract를 사용하는 이유

---- 설계 시 선언해 두면 개발 시 기능을 구현하는 데에만 집중할 수 있다.

---- 개발자의 역량에 따른 메소드의 이름과 매개 변수 선언의 격차를 줄일 수 있다.

---- 공통적인 인터페이스와 abstract 클래스를 선언해 두면, 선언과 구현을 구분할 수 있다.

public interface 인터페이스이름{
    public 리턴타입 메소드이름(매개변수);
}

public class 클래스이름 implements 인터페이스이름 {
    @Override
    public 리턴타입 메소드이름(매개변수){
    	// 구현
    }
}

 

더보기
public interface InterfaceSample{
    public int interfaceMethod();
}

public class InterfaceSampleImpl implements InterfaceSample{
    @Override
    public int interfaceMethod(){
    	// 구현
    }
}

public class InterfaceExample{
    public static void main(String[] args){
       InterfaceSample sample = new InterfaceSampleImpl();
            /*
                InterfaceSampleImpl 클래스는 InterfaceSample 클래스를 구현한 것
                sample의 실제 타입은 InterfaceSample이다
            */
    }
}

 

 

- abstract 클래스

-- 클래스 선언 시 abstract 예약어가 위치해야 한다.

-- abstract 클래스 내에 abstract 으로 선언된 메소드가 0개 이상 존재해야 한다.

-- abstract 으로 선언된 메소드가 하나라도 있는 경우 반드시 abstract로 클래스가 선언되어야 한다.

-- 구현된 메소드가 0개 이상이면 무관하다.

 

public abstract class 클래스이름{
    public abstract 리턴타입 메소드이름(매개변수);
    
    public 리턴타입 메소드이름(매개변수){
    	// 구현
    }
}

public class 클래스이름 extends abstract클래스이름 {
    // abstract로 선언된 메소드를 구현해야 한다.
    public 리턴타입 abstract메소드이름(매개변수){
    	// 구현
    }
}

 

 

- final 예약어

-- final class

public final class FinalClass{
    // 상속이 불가능
}

 

-- final 메소드

public abstract class FinalMethodClass{
    public final void finalMethod(){
    	// 구현
    }
}

public class FinalMethodChildClass extends FinalMethodClass{
    @Override
    public void finalMethod(){
    	// 구현 시 오류 발생
    }
}

 

 

-- final 변수

---- 변수의 선언만 할 수 없고, 반드시 초기화해야 한다.

 

-- final 객체

---- 참조 자료형도 두 번 이상 값을 할당하거나 새로운 생성자를 사용하여 초기화 할 수 없다.

---- 그러나 자료형이 가진 데이터는 변경할 수 있다.

------ 객체 안의 객체들은 final로 선언되지 않았으므로 변경할 수 있다.

 

- enum 클래스

-- 상수의 집합

-- 어떤 클래스가 상수만으로 만들어진 경우 클래스로 선언할 필요가 없다.

-- switch문에서 사용하는 것이 가장 효과적이다.

-- 생성자를 만들 수 있지만, 생성자를 통해 객체를 생성할 수 없다.

-- enum 상수값을 지정하는 것은 가능하지만, 값을 동적으로 할당하는 것은 불가능하다.

public enum EnumClass{
	ENUM_VALUE1,
    ENUM_VALUE2,
    ENUM_VALUE3;
}

 

 

- Enum 클래스 생성자

protected Enum(String name, int ordinal){
    // name : enum 상수 이름
    // ordinal : enum 순서
    // 상수가 선언된 순서대로 0부터 증가
    // 컴파일러에서 자동으로 호출되는 생성자
    // 개발자가 호출할 수는 없다
}

 

-- Enum 메소드

더보기
compareTo(E e)
    // 매개변수로 enum 타입과 순서 차이를 리턴
    
getDeclaringClass()
    // 클래스 타입의 enum 리턴
    
name()
    // 상수의 이름을 리턴
    
ordinal()
    // 상수의 순서를 리턴
    
valueOf(Class<T> enumType, String name)
    // static 메소드로 클래스 타입의 enum, 상수의 이름을 매개변수로 한다.
반응형

'Java' 카테고리의 다른 글

Java의 신_Chapter 15_String  (0) 2024.03.29
Java의 신_Chapter 14_Exception  (0) 2024.03.28
Java의 신_Chapter 12_Object  (0) 2024.03.28
Java의 신_Chapter 11_API  (0) 2024.03.28
Java의 신_Chapter 10_Inheritance  (0) 2024.03.28