▶ 객체지향 프로그래밍 (Object-Oriented Programming, OOP)
- 자바는 대표적인 객체지향 프로그래밍 언어이다.
- 실제 세계를 객체로 나누고 객체들 간의 상호작용을 의미한다.
▶ 객체지향 프로그래밍 구성요소
1. 객체 (object)
→ 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간 (클래스의 인스턴스)
2. 클래스(Class)
→ 객체를 정의하는 틀 또는 설계도, 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메서드(method)로 구성
3. 메서드(Method)
→ 클래스 내의 함수, 프로그램이 실행되고있을때 클래스에서 생성된 인스턴스와 관련된 동작을 정의
public class Main {
public static void main(String[] args) {
// 1. 클래스 데이터 타입으로 객체 참조 변수 선언
// 2. 클래스 생성자 메서드로 새로운 객체 생성 -> data영역과 method영역 생성
// 3. 주소 값을 객체 참조 변수에 할당
User u01 = new User();
u01.Id = "id001"; // 생성된 객체의 data영역의 id에 "id001"을 입력
System.out.println(u01.id); //생성된 객체의 data영역의 id에 "id001"을 꺼내옴
}
출력
id001
※ 스택 영역과 힙 영역
→ 스택은 정적 메모리를 힙은 동적 메모리가 저장되는 영역
☞ 스택은 함수,지역변수,매개변수가 저장되며 LIFO 방식으로 관리되지만 힙 영역은 전역 변수를 다루며 사용자가 직접 관리해야 하는 메모리 영역입니다.
※ 도트 연산자
- 인스턴스 변수에서 함수와 변수를 분리합니다.
- 패키지에서 하위 패키지 및 클래스에 액세스할 수 있습니다.
- 클래스나 패키지의 멤버에 접근하게 한다.
- 클래스의 이름
-
자바 식별자 작성 규칙에 따라야한다.
-
한글 이름도 가능하나, 영어 이름으로 작성한다.
-
알파벳 대소문자는 서로 다른 문자로 인식한다.
-
첫 글자와 연결된 다른 단어의 첫 글자는 대문자로 작성하는 것이 관례이다.
- 클래스의 구성 멤버
▶ 객체 지향 프로그래밍 특징
1. 추상화
→ 객체의 공통적인 속성과 기능을 추출하여 정의하는 것입니다.
2. 캡슐화
→ 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것으로 외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해 제공하는 필드와 메소드만 이용 가능합니다.
※ 정보은닉 : 객체 내부 구현을 숨김으로 객체가 반드시 정해진 매소드와 상호작용하도록 유도
→ 캡슐화와 정보은닉 두 개념은 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향
☞ 재사용에 용이하고 유지보수가 쉬워진다.
3. 상속
→ 상위(부모) 객체의 필드와 메소드를 하위(자식) 객체에게 물려주는 행위로 하위 객체는 상위 객체를 확장해서 추가적인 필드와 메소드를 가질 수 있습니다.
-
상위 객체를 재사용해서 하위 객체를 빨리 개발 가능
-
반복된 코드의 중복을 줄임
-
유지 보수의 편리성 제공
-
객체의 다형성 구현
4. 다형성
→ 같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질 (
- 객체를 부품화시키는 것 가능
- 유지보수 용이
▶ 객체지향 프로그래밍의 장단점
1. 장점
- 재사용성
- 생산성 향상
- 자연적인 모델링
- 유지보수의 우수성
2. 단점
- 개발 속도가 느림
- 실행 속도가 느림
- 코딩 난이도 상승
'코딩 공부 > CS' 카테고리의 다른 글
[CS] 프레임워크와 라이브러리 (0) | 2023.02.13 |
---|---|
[CS] 메모리 구조 (Stack, Heap, Data, Code) (0) | 2023.02.02 |
[CS] 객체지향설계 5원칙 : SOLID (0) | 2023.02.01 |
[CS] REST API (REST, RESTful) (0) | 2022.12.07 |
[CS] 아키텍처(Architecture) (0) | 2022.12.04 |