본문 바로가기

카테고리 없음

추상화에 대하여

추상화란 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업을 의미한다

 

일반적으로 추상화는 사물들의 공통된 특징, 즉 추상적 특징을 파악해 인식의 대상으로 삼는 행위

 

자바에서 추상화란 공통된 행위나 필드를 모아서 클래스를 만드는 것

 

캡슐화

- 정보 은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다

- 응집도: 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다

- 결합도: 어떤 기능을 실행하는데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다

 

일반화 관계

- 객체지향 프로그래밍 관점에서 상속 관계라 한다

- 여러 개체들이 가진 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립 시키는 과정

- 공통된 속성이나 행위를 하나에 클래스에 모아서 상속 받아서 자식 클래스가 사용한다

- 이 클래스 관계를 일반화 관계(상속 관계)라고 한다

 

다형성

- 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력

- 자바에서는 추상메서드를 호출하면 자동으로 오버라이딩 된 메서드를 호출(동적 바인딩)

 

피터 코드의 상속 규칙 (상속의 오용을 막기 위해 상속의 사용을 엄격하게 제한하는 규칙들을 만듬)

- 자식 클래스와 부모 클래스 사이는 역할 수행 관계가 아니어야 한다

- 한 클래스의 인스턴스는 다른 서브 클래스의 객체로 변환할 필요가 절대 없어야 한다

- 자식 클래스가 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행해야 한다

- 자식 클래스가 단지 일부 기능을 재사용할 목적으로 유틸리티 역할을 수행하는 클래스를 상속하지 않아야 한다

- 자식 클래스가 역할, 트랜잭션, 디바이스 등을 특수화 해야 한다

 

추상화란 공통적인 특징을 찾아내어 class를 설계하는 것

 

추상화 클래스는 클래스 상속인 extends를 통해서 추상 타입을 구현

 

extends 클래스를 확장하기 위한 것 (클래스 선언과 내용이 들어가 있는 것)

implements 인터페이스를 구현하기 위해 생긴 것 (인터페이스는 선언만 되어 있는 것)

 

extends를 통해 해당 추상 클래스를 상속 받는 실체 클래스들은 반드시 추상메서드를 상속 받아 재정의(오버라이딩) 해야 한다. 오버라이딩을 하면 다형성이 발생 한다.

 

인터페이스

- 추상 메소드 만을 가질 수 있다

- 인터페이스를 상속 받는 클래스에서는 반드시 인터페이스 안의 메소드를 모두 구현해야 한다

- 주로 인터페이스를 구현한 객체들에 대해 동일한 동작을 약속하기 위해 사용 된다

 

추상 클래스와 인터페이스의 차이점

메소드의 유형

- 인터페이스: 모두 추상 메소드

- 추상크래스: 추상 메소드(선택) + 일반 메소드

 

변수의 final 여부

- 인터페이스: 기본적으로 final 붙임 

- 추상클래스: x

 

클래스인가

- 인터페이스: x

- 추상클래스: o

 

목적

- 인터페이스: 구현 객체의 같은 동작 보장

- 추상클래스: 상속 받아 기능을 확장해 나감

 

다중 상속 

- 인터페이스: 가능

- 추상클래스: 불가능

 

추상 클래스는 인스턴스를 생성 할 수 없다

추상 클래스는 미완성의 추상 메소드를 포함 할 수 있다

- 추상 메소드란, 내용이 없는 메소드이다. 구현이 되지 않은 메소드이다

- 추상 메소드는 리턴 타입 앞에 abstract라는 키워드를 붙여야 한다

추상 클래스를 상속 받은 클래스는 추상 클래스가 갖고 있는 추상 메소드를 반드시 구현해야 한다

추상 클래스를 상속 받고, 추상 클래스가 갖고 있는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다

추상 클래스로 객체를 생성 할 수 없다.

 

 

 

 

참조 

https://jokerkwu.tistory.com/82#:~:text=%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%B6%94%EC%83%81%ED%99%94%EB%8A%94%20%EC%82%AC%EB%AC%BC,%EB%AA%A8%EC%95%84%EC%84%9C%20%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EA%B2%83%EC%9D%B4%EB%8B%A4.&text=%EB%8B%A4%ED%98%95%EC%84%B1%EC%9D%80%20%EC%84%9C%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%ED%81%B4%EB%9E%98%EC%8A%A4,%EC%9C%BC%EB%A1%9C%20%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%20%EB%8A%A5%EB%A0%A5%EC%9D%B4%EB%8B%A4.

 

자바 추상화

추상화란 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업을 의미한다. 일반적으로 추상화는 사물들의 공통된 특징, 즉 추상적 특징을 파악해 인식의 대상으로 삼는 행위이다. 자바��

jokerkwu.tistory.com

 

https://limkydev.tistory.com/188

 

[JAVA] 자바 추상클래스란?

[JAVA] 자바 추상클래스란? 추상클래스 이 글 하나로 박살내자. 추상클래스의 문법적인 특징이나, 객체생성이 되고 안되고 이런 특징들이 중요한게 아닙니다. 도대체 추상클래스가 무엇이고 왜

limkydev.tistory.com

https://shinsunyoung.tistory.com/18

 

추상화(Abstract)

추상화란? 객체에서 공통된 속성과 행동을 추출하는 것이다. 자바에서 추상화를 이용하는 방법은 추상 클래스 또는 인터페이스가 있다. 추상 클래스(Abstract Class) 추상 메소드를 포함할 수 있는 �

shinsunyoung.tistory.com

https://programmers.co.kr/learn/courses/5/lessons/188