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) 참조 자료형 변수는 값을 주소(포인터)로 판단한다.
→ 즉, 두 방식 모두 가지고 있는 값을 그대로 복사해서 넘겨준다는 점은 동일하다.
'Java > 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
자바가 확장한 객체 지향 (0) | 2023.09.04 |
---|---|
자바와 절차적/구조적 프로그래밍 (0) | 2023.08.30 |
자바 객체 지향의 원리와 이해 출처 (0) | 2023.08.30 |
댓글