본문 바로가기
Java/자바 객체 지향의 원리와 이해

자바와 객체 지향

by k-mozzi 2023. 8. 31.
반응형
Preface

 

이번 장에선 객체 지향의 4대 특성을 알아봤다.

 

'이것이 자바다' 책을 공부하며 이미 한 번 학습했던 내용이지만, 중간중간 기억이 잘 나지 않는 부분도 있었다.

 

아무래도 자바의 상속, 인터페이스, 접근제한자와 관련된 내용은 복습이 필요할 것 같다.

 

그래도 이것저것 공부한 개념이 많아져서 그런지 처음 객체 지향을 공부했을 때 보단 훨씬 이해가 잘 되고 쉽게 느껴졌다.

 

특히 추상화와 다형성의 개념을 코드를 통해 이해할 수 있게 된 것 같다.


 

- 객체 지향은 인간 지향이다.

→ 객체 지향은 직관적이다.

 

 

- 객체 지향의 4대 특성

1) 캡슐화(Encapsulation): 정보 은닉

2) 상속(Inheritance, Extends): 재사용

3) 추상화(Abstraction): 모델링

4) 다형성(Polymorphism): 사용 편의

 

 

- 클래스는 분류, 객체는 실체로 기억하자.

 

 

- 추상화: 구체적인 것을 분해해서 관찰자가 관심 있는 특성만으로 재조합하는 것

 

 

- 모델: 추상화를 통해 실제 사물을 단순하게 묘사하는 것

→ 클래스 모델의 국제 표준 표기법: UML 클래스 다이어그램

 

 

※ 추상화 = 모델링 = 자바의 class 키워드

 

 

- 객체 = object = 클래스의 인스턴스

 

 

- 속성: 명사로 표현되는 특성

→ 값을 가질 수 있다.

 

 

- 기능/행위(메서드): 동사로 표현되는 특성

→ 수행 절차(로직)을 갖게 된다.

 

 

- 객체에 속한 속성은 객체가 생성된 후 힙 영역에 메모리 공간이 할당된다.

 

 

- UML 표기법

1) 클래스 멤버: 밑줄을 사용하여 표현

2) 객체 멤버: 밑줄 없이 표현

→ 두 멤버를 구분하는 자바 키워드는 static이다.

 

 

- 멤버의 비교

1) 클래스 멤버 = static 멤버 = 정적 멤버

2) 객체 멤버 = 인스턴스 멤버

 

 

- 변수

1) 객체 참조 변수: 객체를 가리키는 변수

2) 객체 멤버 변수: 객체 내부에 선언된 변수

 

 

- 객체 참조 변수가 참조하는 값이 없어지면 Garbage Collector가 해당 변수를 수거한다.

 

 

- 정적 메서드: 객체들의 존재 여부와 관계없이 사용할 수 있는 메서드

 

 

- 지역 변수는 개발자가 별도로 초기화하지 않으면 쓰레기 값을 갖게 되지만, 클래스 속성과 객체 속성은 별도의 초기화를 해주지 않아도 정해진 기본값으로 초기화된다.

 

 

- 객체 지향에서 상속은 확장이라고 생각하자.

→ 계층도나 조직도가 아닌 분류도이다.

 

 

- 상속 관계에서 하위 클래스는 상위 클래스로 타입변환할 수 있다.

→ 상위 타입에 모든 하위 객체가 대입될 수 있다.

 

 

- 클래스 상속 구조에서 최상위 클래스는 Object이므로, 어떤 클래스의 인스턴스인지와 관계 없이 toString( ) 메서드를 사용할 수 있다.

 

 

- 객체 지향 상속의 주요 개념

1) 상속은 상위 클래스의 특성을 재사용하는 것이다.

2) 상속은 상위 클래스의 특성을 확장하는 것이다.

3) 상속은 is a kind of 관계를 만족해야 한다.

 

 

- 자바는 클래스 다중 상속을 지원하지 않지만, 인터페이스는 다중 상속이 가능하다.

 

 

- 인터페이스는 구현 클래스가 특정 기능을 구현하도록 강제한다.

 

 

- 인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다.

→ 상위 클래스나 인터페이스 타입으로 하위 클래스의 객체를 참조할 수 있지만, 클래스 이름으로 참조하는 경우 클래스의 메서드와 멤버에만 접근할 수 있고, 인터페이스에서 선언된 메서드는 이용할 수 없다.

 

 

- 하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 힙 영역에 함께 생성된다.

 

 

- 상위 타입으로 자동 타입 변환된 후에는 상위 클래스에 선언된 필드와 메서드에만 접근할 수 있다.

→ 메서드가 하위 클래스에서 오버라이딩되었다면 하위 클래스의 메서드가 대신 호출된다.

 

 

- 다형성: 자바에서 주로 오버라이딩과 오버로딩을 통해 구현된다.

 

 

- UML 표기법에서의 접근 제어자 표현 방법

1) private: '-'

2) [default]: '~'

3) protected: '#'

4) public: '+'

 

 

- 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 한다.

 

 

- 정적 멤버는 '객체참조변수명.정적멤버' 형식보단 '클래스명.정적멤버' 형식으로 접근하는 것이 좋다.

→ 일관된 형식으로 접근하기 위함이다.

 

 

- 변수에 값 대입하기

1) 기본 자료형 변수는 값을 값 자체로 판단한다.

2) 참조 자료형 변수는 값을 주소(포인터)로 판단한다.

→ 즉, 두 방식 모두 가지고 있는 값을 그대로 복사해서 넘겨준다는 점은 동일하다.

 

728x90
반응형

댓글