다양한 기록

OOP #3 : Class, Instance, Polymorphism 본문

소프트웨어공학

OOP #3 : Class, Instance, Polymorphism

라구넹 2024. 10. 20. 20:45

클래스

- 객체 유형은 객체의 범주

- 클래스는 객체 유형의 소프트웨어 구현

- 클래스는 객체들의 집합

- 클래스는 각 객체에 적용되는 데이터 구조와 연산을 포함

 

인스턴스

- 인스턴스는 클래스에 속하는 객체임

- 클래스의 모든 인스턴스는 동일한 속성과 메소드 집합을 가짐

 

생성자

- 클래스 이름과 동일한 이름을 가진 메소드로 인스턴스를 생성

 

소멸자

- 생성자의 반대로 생성된 객체 인스턴스를 메모리로부터 제거

- 객체가 제거되면 자동적으로 수행됨

 

클래스 변수

- static => 메모리에 미리 올라옴.. BSS 세그먼트

- 객체들 간 공유함

 

클래스 메소드

- static 선언

- C#이나 자바는 Main이 static으로 선언되어 있어야 함

- 메소드를 실행하려면 객체를 만들어야 하는데 맨 처음엔 그런게 없음

=> static으로 런타임 이전에 메모리에 올려야 함


Inheritance

- 상위 클래스의 속성 또는 행위를 하위 클래스가 상속하여 재사용하는 것을 의미

- super class, base class, parent class ..

- sub class, derived class, child class


Polymorphism (다형성)

- 함수 오버로딩

둘 이상의 객체들이 같은 메시지에 대해 각자 고유한 방식으로 응답 가능.. 매개변수 개수나 타입이 달라야 함

- 연산자 오버로딩

일반적인 연산자를 다른 유사한 용도로 사용할 수 있도록 재정의하는 것

 

오버라이딩 vs. 오버로딩

메소드 오버라이딩

- 상속받은 메소드에 대해 서브 클래스가 무시하고 재정의

- 메소드 이름과 매개 변수가 같으면서 구현이 다른 메소드가 클래스의 계층 상 여러개 존재 가능

- 한 클래스의 참조 변수가 계층 상의 여러 클래스 참조 가능

- 시스템이 실행 시간에 객체의 클래스를 판단해서 그 클래스에서 구현된 메소드 실행 (동적 바인딩)

 

메소드 오버로딩

- 한 클래스 내에서 이름이 같고 매개 변수의 수나 타입만 다른 메소드들이 여러개 구현되어 있을 수 있음

- 메소드를 호출하면 시스템은 인자의 수와 타입에 일치하는 메소드 구현을 선정하여 실행


추상 클래스(Abstract class)

- 가상 클래스 개념.. 여러 개의 클래스의 상위 클래스로 상속 계층을 만들어 구조화

- 하위 클래스의 인터페이스 역할

- 연산 중에 virtual(abstract) 함수를 포함해야 함

- 추상 클래스에서 상속받은 클래스를 concrete class라 함

 

추상 클래스와 추상 메소드

추상 클래스

- 아직 덜 구현된 클래스

- 추상 메소드를 갖는 클래스는 추상 클래스

- 추상 클래스를 상속받는 서브 클래스가 추상 메소드를 구현

- 객체 생성 불가

- 클래스 계층 구조에서 사용, 자식이 구현하지 않으면 자식 클래스도 추상 클래스

 

추상 메소드

- 메소드의 인터페이스만 정의되어 있는 메소드

- 메소드의 선언 시 abstract 키워드 사용

- 추상 메소드는 몸체를 가지지 않는다


Generic Class

- 클래스 안의 데이터의 타입을 미리 정하지 않고 객체를 생성할 때 그 타입을 선언하여 만들 수 있게 함


객체 지향의 장점

1. 생산성 향상

2. 자연스러운 모델링

3. 변화에 대비한 설계

4. 재사용 가능성

5. 유지보수 용이성

6. 더 안정적인 시스템


문제

성능

- 메시지와 해당 프로시저 간의 바인딩

- 가비지 컬렉션

- 작은 객체가 많은 시스템에서의 스왑 오버헤드

...

아직 공식적인 배경 부족!