[OOP] 상속을 자제하고 합성(Composition)을 이용하라
·
Computer Science/OOP
상속과 합성 개념 정리 프로그래밍을 할때 가장 신경 써야 할 것 중 하나가 바로 코드 중복을 제거하여 재사용 함으로써 변경, 확장을 용이하게 만드는 것이다. 그런 관점에서 상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법이다. 상속(Inheritance) 합성(Composition) 부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결 두 객체 사이의 의존성은 런타임에 해결 is-a 관계 has-a 관계 부모클래스의 구현에 의존 결합도가 높음. 구현에 의존하지 않음. 내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존. 클래스 사이의 정적인 관계 객체 사이의 동적인 관계 부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용 포함되는 객체의 퍼블릭 인터페이스를 재사용 ..
[OOP] 캡슐화 & 정보 은닉 개념
·
Computer Science/OOP
캡슐화 (Encapsulation) 캡슐화란 쉽게 말하면 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념중 하나이다. 우리가 먹는 알약을 생각해보자. 알약의 실제 약 내용은 가루약이지만, 이것을 캡슐로 감싸면서 맛을 은닉하여 사람이 먹기 편하게 하였으며, 또한 복잡한 재료들의 배합을 캡슐로 포장하여 다루기 편리하도록 하였다. 이처럼 캡슐화는 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨겨 은닉한다. 또한 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과도 누릴 수 있다. 자바에서는 대표적으로 protected , default , private의 접근제어자를 통해 구현이 가능하다. class Time { private i..
자바의 다형성(Polymorphism)
·
Computer Science/OOP
다형성 (Polymorphism) 다형성(Polymorphism) 이란, 그 자체의 의미를 표준 국어사전에서 찾아보면, '같은 종의 생물이면서도 어떤 형태나 형질이 다양하게 나타나는 현상' 이라 정의되어 있다. 이를 프로그래밍에서는, 다형성(polymorphism)이란 같은 자료형에 여러가지 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질을 의미한다. 이를 통해 조상 클래스의 참조 변수로 자손 클래스의 참조 변수를 다루거나, 동일한 이름을 갖는 여러 형태의 매소드를 만들 수 있다. 자바에선 대표적으로 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅, 인터페이스, 추상메소드, 추상클래스 방법이 모두 다형성에 속하다고 생각하면 된다. 즉, 다형성은 클래스가 상속 관계에 있을때 나타나는 다채로운 성질..
[OOP] 객체 지향 개념과 추상화
·
Computer Science/OOP
객체 지향(OOP) 개념과 특징 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 이 패러다임은 프로그램에 필요한 데이터를 독립적입 객체들의 집합으로 모델링하는 방식을 강조한다. 또한 각 객체는 데이터를 추상화 시켜 상태(데이터)와 행위(데이터를 조작하는 메서드)를 가진 객체로 만들고 이 객체(Object)들이 모여 서로 상호 작용하면서 데이터를 처리하는 방식을 일컫는다. 객체 지향 프로그래밍에서 객체는 실제 세계의 개념이나 사물을 모델링한 것으로 생각할 수 있다. 예를 들어, 자동차를 객체로 모델링할 수 있다. 자동차 객체는 속성(데이터)로는 차량 번호, 제조사, 색상 등을 가지고 있을 수 있고, 메서드(기능)로는 주행, 정지..
[OOP] 객체 지향 키워드 (추상화,캡슐화,상속,다형성)
·
Computer Science/OOP
객체 지향 프로그래밍 키워드 5가지 클래스, 인스턴스, 객체 추상화 캡슐화 상속 다형성 1. 추상화(Abstraction) 추상화란(자료의 추상화, 추상클래스 & Interface)? 우리는 보통 알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하고는 한다. 이것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 하는데 객체지향의 개념에서 추상화는 중요한 개념 중에 하나이다. 컴퓨터 과학에서의 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 객체 지향 관점에서의 추상화는 클래스를 정의할 때, 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 간략화 하는 것, 즉 클래스들의 중요하고 공통된 성질들을 추출하..