📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임 중 하나이다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태(속성, 어트리뷰트)와 행위(메서드)를 가진 객체로 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 방법을 의미한다.
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 된다.
객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 비유할 수 있다.
객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다.
객체에서 공통된 속성과 행위를 추출해 공통의 속성과 행위를 찾아서 타입을 정의하는 과정이다.
객체 지향 프로그래밍의 특징 중 하나인 '추상화'는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다.
즉, 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.
추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만든다.
객체의 필드와 메서드를 묶고, 실제 구현 내용은 감추는 것이다.
(객체 지향 프로그래밍에서 기능과 특성의 모음을 "클래스라는 "캡슐"에 분류해서 넣는것)
외부 객체는 객체 내부의 구조를 알 수 없으며, 객체가 노출해서(ex. public) 제공하는 필드와 메소드만 이용할 수 있다.
필드와 메소드를 캡슐화 하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위함이다.
1) 코드를 재수정 없이 재활용하는 것
2) 접근 제어자를 통한 정보 은닉
자바 언어는 캡슐화된 멤버를 노출 시킬 것인지 숨길 것인지 결정하기 위해 접근 제한자(
Access Modifier
)를 사용한다.
클래스의 상속은 부모 클래스의 멤버(필드, 메서드, 내부 클래스)를 내려받아 자식 클래스 내부에 포함시키는 것이다. 자식 클래스에서는 부모 클래스의 속성과 기능을 이어받아 사용할 수 있다.
부모(parent class, super class / 상위 클래스)
: 해당 클래스에 선언된 변수와 함수를 물려주는 클래스자식(child class, sub class / 하위 클래스)
: 다른 클래스로부터 물려받고자 하는 클래스
1) 반복된 코드의 중복을 줄임
2) 유지 보수의 편리성 제공
3) 클래스의 다형적 표현 가능
다중상속은 불가능하다. (클래스의 상속 관계에 혼란을 줄 수 있기 때문)
같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다.
(즉, 오버라이딩(Overriding
), 오버로딩(Overloading
)이 가능하다.)
오버라이딩(Overriding)
: 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것오버로딩(Overloading)
: 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것
객체란 클래스에 선언된 모양 그대로 생성된 실체를이며, '클래스의 인스턴스'라고 부른다.
인스턴스(instance, 객체)
: 클래스를 통해서 구현해야할 대상(객체)이 실제로 구현된 구체적인 실체를 말한다.
클래스란 객체를 정의하고 만들어 내기 위한 설계도 혹은 틀이다. 클래스 안에는 객체를 만들어내기 위해 필요한 변수와 메서드들이 존재한다.
인스턴스 멤버
: 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메서드이다. 이들을 각각 인스턴스 필드, 인스턴스 메서드라고 부른다.정적 멤버
: 클래스에 고정된 멤버로서, 객체를 생성하지 않고 사용할 수 있는 필드와 메서드이다. 이들을 각각 정적 필드, 정적 메서드라고 부른다. 정적 멤버는 객체가 아닌 클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 한다.
<Do it! 자바 완전 정복>
https://rap0d.github.io/study/2019/08/24/java_12_javaclass/
https://nathanh.tistory.com/120
http://www.tcpschool.com/java/java_class_intro
https://hoonmaro.tistory.com/42
https://hongong.hanbit.co.kr/%EC%9E%90%EB%B0%94java-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%83%81%EC%86%8D/
https://jeong-pro.tistory.com/95
https://code-lab1.tistory.com/246
https://javakid.tistory.com/8