JAVA -추상클래스, 인터페이스

Mkim4·2023년 12월 21일

추상화란?

추상화란 불필요한 정보를 숨기고 중요한 정보만을 나타내는 것을 의미
추상화를 이용하면 어떤 영역에서 필요한 공통의 속성이나 행동을 추출함으로써 효율적인 코드를 작성할 수 있음

1) public static final 상수 필드 , 인터페이스 형태로 직접접근이 가능함
2) 추상메소드 (abstract 리턴타입 메소드명(); 구현객체에서 반드시 오버라이딩해서 재정의해줘야하는 메소드이다)
3) default 메서드(default 리턴타입 메소드명(){} => 구현객체에서 재정의 하여 사용가능(default 키워드 삭제하고 public으로 오버라이딩), 유일하게 인터페이스에서 바디가 있음!)
4)정적메소드 (static 리턴타입 메소드명())
구현객체가 없어도 인터페이스 호출만으로 사용할 수 있다.
(public | private) static 리턴타입 메소드명(p1,p2... ){}
----public----

5) 인터페이스에서 외부접근 막고 싶을 때 private 메소드 설계를 한다.

  • private 메소드 (용도: default 와 static, 디폴트와 정적메소드들의 중복코드를 줄이기 위해 만들어진 것, private 메소드는 디폴트 메소드 안에서만 호출이 가능)
  • private static 메소드

추상화

유스케이스도 추상화한 것임
추상화 사용의 장점
객체 간의 복잡성이 줄어듦
코드의 중복을 막고 재사용성을 높일 수 있음
사용자에게 중요한 세부정보만 제공하므로 응용 프로그램이나 프로그램의 보안에 도움이 됨

추상화의 유형

데이터 추상화 - 주로 복잡한 자료형을 만들고 구현을 숨기는 것으로 구현의 세부사항으로 이동하지않고 데이터 유형을 조작하는 작업만 노출

제어 추상화 - 작업의 단위 정의를 만들고 필요할 때마다 재사용, 반복되는 모든 코드를 수집하고 이를 하나의 단위로 노출 ex) 오버라이딩, 오버로딩

추상화의 구현 방법
추상화는 추상클래스 또는 인터페이스를 통해 구현(실체화)시킬 수 있음

접근제한자(public, protected, default, private)
타입, 리턴 정의
추상클래스나 인터페이스에 들어갈 수 있는 멤버가 있다. 고정값, 디폴트 생성자


굳이 abstract 이 없어도 바디가 없으면 추상 클래스이다.
나의 시그니처를 쓰겠다고 요청하였으니 이 규칙을 따라서 정의해다오

인터페이스

인터페이스 : 두 객체를 연결하는 역할
다형성 구현에 주된 기술
인터페이스는 private를 붙일 필요가없음


인터페이스는 interface 키워드를 사용하여 선언
일반 메소드는 못들어감

인터페이스의 장점

코드를 변경하지 않고 객체의 주소값을 넣어주면 된다.
통신에 대한 흐름을 규격화할 수 있다.
완전한 추상화를 구현할 수 있음
인터페이스를 통해서 동시에 여러 기능을 구현할 수 있다. -> 다중 상속 구현 가능
인터페이스는 완전한 추상화를 구현할 수 있음, 내가 생각한 것을 컴퓨터로 옮길 수 있음.
느슨한 결합 관계를 형성할 수 있음(ex 하나의 리모콘으로 여러개의 객체를 제어할 수 있다.)

왜 인터페이스는 new 를 할 수 없는가?

설계의 용도로 만들었기 때문에 실체화될 수 없음, 구현객체가 아니기 때문에
기능에 대한 기준, 이름 , 시그니처, 데이터의 셋팅을 핸들링하기 위해 기능적인 스펙은 인터페이스가 정한다.

객체에 대한 데이터 셋은 클래스에서 정함
객체는 하나의 클론이고 기준템플릿에 맞춰서 속성값만 바뀌고 객체는 데이터의 공간적인 개념

자바는 객체에 대한 상속에 대한 스토리라인을 정확하게 파악하기 위해서 단일 상속을 함
객체지향에서 솔리드원칙이라고 있음 객체지향의 5가지 원칙이 있음, 그 원칙을 기반으로 프레임워크가 만들어졌음

profile
귀요미 개발자

0개의 댓글