5/14 인프런 Java 공부 내용
Interface?
디자인패턴에서 다시 한 번 보자. 객체 구현을 위한 작업명세서라고 볼 수 있다.
추상클래스와 다른 점은, 추상클래스는 추상, 일반 메소드, 일반 변수를 가질 수 있지만 인터페이스는 추상메소드와 상수만 가질 수 있다는 것이다.
기억하자, 상수와 추상 메소드만 존재한다.
다형성?
다형성이란 것은 인터페이스와 항상 짝을 이루는 것이 설명하기 좋은 것 같다.
다(양한)형(태를 가진) (속)성 이다.
인터페이스가 2개 있고 이를 임플리먼트하는 클래스가 1개 있다.
그리고 해당 클래스는 각각의 인터페이스가 요구하는 모든 멤버를 정의했다.
여기까진 문제가 없다.
그리고 클래스의 인스턴스를 생성했다.
그런데 데이터타입이 클래스가 아니라 구현한 인터페이스이다.
이 경우 해당 인스턴스는 (본인 인터페이스 외)클래스의 모든 멤버를 사용할 수 있을까?
그럴 수 없다.
데이터타입이 인터페이스1이기 때문에 인터페이스 1의 멤버만 사용 가능하다.
자 그렇다면 왜 굳이 인터페이스를 나누어서 구현할까?
첫째로는 인터페이스의 목적은 명세라는 역할도 있지만, 데이터타입을 묶어주는 역할도 있기 때문이다.
두번 째로는 클래스를 유동적으로 유연하게 사용할 수 있어야 하기 때문이다.
어떤 경우엔 모든 클래스의 멤버를 구현해야 하는 경우가 있겠지만
또 상황에 따라서는 클래스의 일부 멤버만을 적용해야 하는 경우가 있다.
그런 상황에서 인터페이스의 구분은 적용해야 하는 것을 구분시켜주는 역할을 한다.
그럼 굳이 인터페이스를 구현하는 클래스를 만들어서 인스턴스화 할 것이 아니라
인스턴스를 그냥 인스턴스로 만들면 되지 않는가? 라는 의문이 발생할 수 있지만
인터페이스는 바로 인스턴스화 할 수 없다.
싱글톤
싱글톤이란 한 클래스에서 인스턴스를 생성하고 본 인스턴스가 외부에 전역적인 접촉점을 제공하는 것을 의미한다.
OOP가 아니라는 일각의의견도 있지만, 싱글톤이 주는 장점도 있다.
DB커넥션이 매번 맺어지는 것보다 싱글톤 패턴으로 한번 만들어 주고 커넥션 객체를 다른 인스턴스들이 접근할 수 있도록 하는 것이 자원관리에 더 효율적이다.
스트레터지 패턴 만들어보기
디자인패턴에서 다시 한 번 보자. 객체 구현을 위한 작업명세서라고 볼 수 있다.
추상클래스와 다른 점은, 추상클래스는 추상, 일반 메소드, 일반 변수를 가질 수 있지만 인터페이스는 추상메소드와 상수만 가질 수 있다는 것이다.
기억하자, 상수와 추상 메소드만 존재한다.
다형성?
다형성이란 것은 인터페이스와 항상 짝을 이루는 것이 설명하기 좋은 것 같다.
다(양한)형(태를 가진) (속)성 이다.
인터페이스가 2개 있고 이를 임플리먼트하는 클래스가 1개 있다.
그리고 해당 클래스는 각각의 인터페이스가 요구하는 모든 멤버를 정의했다.
여기까진 문제가 없다.
그리고 클래스의 인스턴스를 생성했다.
그런데 데이터타입이 클래스가 아니라 구현한 인터페이스이다.
이 경우 해당 인스턴스는 (본인 인터페이스 외)클래스의 모든 멤버를 사용할 수 있을까?
그럴 수 없다.
데이터타입이 인터페이스1이기 때문에 인터페이스 1의 멤버만 사용 가능하다.
자 그렇다면 왜 굳이 인터페이스를 나누어서 구현할까?
첫째로는 인터페이스의 목적은 명세라는 역할도 있지만, 데이터타입을 묶어주는 역할도 있기 때문이다.
두번 째로는 클래스를 유동적으로 유연하게 사용할 수 있어야 하기 때문이다.
어떤 경우엔 모든 클래스의 멤버를 구현해야 하는 경우가 있겠지만
또 상황에 따라서는 클래스의 일부 멤버만을 적용해야 하는 경우가 있다.
그런 상황에서 인터페이스의 구분은 적용해야 하는 것을 구분시켜주는 역할을 한다.
그럼 굳이 인터페이스를 구현하는 클래스를 만들어서 인스턴스화 할 것이 아니라
인스턴스를 그냥 인스턴스로 만들면 되지 않는가? 라는 의문이 발생할 수 있지만
인터페이스는 바로 인스턴스화 할 수 없다.
싱글톤
싱글톤이란 한 클래스에서 인스턴스를 생성하고 본 인스턴스가 외부에 전역적인 접촉점을 제공하는 것을 의미한다.
OOP가 아니라는 일각의의견도 있지만, 싱글톤이 주는 장점도 있다.
DB커넥션이 매번 맺어지는 것보다 싱글톤 패턴으로 한번 만들어 주고 커넥션 객체를 다른 인스턴스들이 접근할 수 있도록 하는 것이 자원관리에 더 효율적이다.
스트레터지 패턴 만들어보기
알고리즘군을 정의하고 각각 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할수 있다.
쉽게말하자면 클라이언트의 코드 결합도를 낮추기 이해 부분들을 부품화 하는 것이라고 지금은 이해하자.
댓글
댓글 쓰기