자바강의 - [5주차] 객체와 객체 지향 프로그래밍 핵심 (2)
인터페이스 (Interface)
- 추상메서드와 상수만을 멤버로 가질 수 있음
- 인터페이스 자체를 활용한다기 보다는 다른 클래스를 작성하는데 도움을 줄 목적으로 사용
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있음
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있음 (단, static 메서드와 디폴트 메서드는 예외(JDK 1.8부터)
- 인터페이스는 인터페이스로부터만 상속 받을 수 있고, 클래스와는 달리 다중상속이 가능함
- 예제 문법
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 모두 구현
}
인터페이스를 이용한 다형성
- 다형성을 이용하여 자손클래스의 인스턴스를 조상타입의 참조변수로 참조하는 것이 가능
- 인터페이스는 인터페이스를 구현한 클래스의 조상이라고 할 수 있으므로 해당 인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있음
- 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미
인터페이스의 장점
- 개발시간을 단축시킬 수 있음
- 인터페이스가 작성되면, 메서드의 내용에 관계없이 선언부만 알면 되기 때문에 프로그램을 작성하는 것이 가능함
- 표준화가 가능
- 기본 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능
- 서로 관계없는 클래스들에게 관계를 맺어줄 수 있음
- 아무런 관계가 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있음
- 독립적인 프로그래밍이 가능
- 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램을 작성하는 것이 가능하며 직접적인 관계가 아닌 인터페이스를 이용한 간접적인 관계로 변경하면 클래스간의 변경이 영향을 미치지 않는 독립적인 프로그래밍이 가능함
디폴트 메서드
- JDK 1.8부터 디폴트 메서드를 추가할 수 있음
- 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드
- 구현하는 클래스에서 재정의 할 수 있음
- default 키워드 사용
- 예제 문법
default void 메서드_이름() {
// 메서드 구현
}
static 메서드
- JDK 1.8부터 디폴트 메서드를 추가할 수 있음
- 인스턴스 생성과 상관없이 인터페이스 타입으로 사용할 수 있는 메서드
private 메서드
- 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없음
- 인터페이스 내부에서만 사용하기 위해 구현하는 메서드
- default 메서드나 static 메서드에서 사용함
여러가지 자료구조에 대해 알아보기
자료 구조(Data Structure)란?
- 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법들
- 효율적인 자료구조가 좋은 성능의 알고리즘의 기반이 됨
- 자료의 효율적인 관리는 프로그램의 수행속도와 밀접한 관련이 있음
선형 자료구조
- 배열(Array)
- 선형으로 자료를 관리
- 정해진 크기의 메모리를 먼저 할당받아 사용
- 자료의 물리적 위치와 논리적 위치가 같음
스택(Stack)
- 가장 나중에 입력 된 자료가 가장 먼저 출력되는 자료구조(Last In First Out)
큐(Queue)
- 가장 먼저 입력 된 자료가 가장 먼저 출력되는 자료구조(First In First Out)
트리(Tree)
- 부모 노드와 자식 노드간의 연결로 이루어진 자료 구조
이진 트리(Binary Tree)
- 부모 노드에 자식 노드가 두 개 이하인 트리
그래프(Graph)
- 정점과 간선들의 유한 집합 G = (V,E)
- 정점(vertex) : 여러 특성을 가지는 객체, 노드(node)
- 간선(edge) : 이 객체들의 연결 관계를 나타냄, 링크(link)
- 간선은 방향성이 있는 경우와 없는 경우가 있음
- 그래프를 구현하는 방법
- 인접 행렬(adjacency matrix)
- 인접 리스트(adjacency list)
- 그래프를 탐색하는 방법
- BFS(Bread First Search) - 너비우선탐색
- DFS(Depth First Search) - 깊이우선탐색
해싱(Hashing)
- 검색을 위한 자료구조
- 키(key)에 대한 자료를 검색하기 위한 사전(dictionary) 개념의 자료구조
- key는 유일하고 이에 대한 value를 쌍으로 저장
- 해시 함수에 의해 인덱스 연산이 산술적으로 가능 O(1)
- 저장되는 메모리 구조를 해시테이블이라 함
참고자료
Java & SpringBoot로 시작하는 웹 프로그래밍 강의 : #패스트캠퍼스 #내일배움카드 #K디지털크레딧 #바이트디그리 #자바인강
댓글 영역