객체 지향에 대한 이해
객체 지향? 이 세상에 모든 사물들을 프로그래밍화 시키겠다!
- 객체 : Object , '사물'을 나타내는 추상적인 개념
- 지향 : Oriented, ~을 향한다
예) 레고
구조적 프로그래밍 vs 객체 지향 프로그래밍
- 구조적 프로그래밍 : 순차적, 구조적, 폭포수 방식
- 기능적인 기본 단위 : 함수
- 건축같은 순차적 작업에 적합
- 하지만, 요구사항들이 계속해서 바뀌는 현대에 맞지 않음!
- 객체 지향 프로그래밍 : 유연
- 기능 단위 : 객체
- 결합과 분리가 쉬움 (조립식 건물과 비슷)
추상화
추상 : 대상에서 특징만 뽑아낸 것
예) 개 (추상) : 진돗개, 삽살개, 치와와 ...
- 플라톤의 이데아와 일맥 상통
- 개를 본게 중요 / 어떤 개의 종류를 본게 중요하지 않음
- 개라는 개가 존재한다고 말함
- 개의 본질, 개의 원형은 이데아의 세개, 관념의 세계에 존재
=> 클래스의 개념
캡슐화
: 은닉, 숨긴다는 의미
- 데이터 숨기기
- 외부에서 내부를 볼 수 없게 함
- 하지만, 마냥 숨기기만 하면 무용지물 -> 외부에서 데이터를 조작할 인터페이스 필요
하나의 캡슐 단위
- 클래스 = 데이터 + 메소드
- 은닉된 데이터 : 프로퍼티, 필드, 속성, 멤버 변수
- 메소드 : 멤버함수, 즉 인터페이스임 / 메소드를 통해 외부와 소통
클래스
: (학급) 사용자 정의 데이터 타입
: 추상적인 데이터타입
: 멤버 변수와 멤버 함수로 구성
: class 키워드 사용
클래스 구성
- 추상화 : 사물의 특성을 정리해 필드(멤버 변수)와 메소드로 표현하는 과정
- 캡슐화 : 추상화된 결과(필드, 메소드)를 하나의 클래스에 포함시켜 스스로 보호하는 것
선언 형식
class 클래스 이름 {
접근 지정자 클래스 이름() {}; //생성자
접근 지정자 ~클래스 이름() {}; //소멸자
접근 지정자 데이터형 멤버 변수(필드) {}; //변수 선언
접근 지정자 데이터형 메소드(){}; //메소드 선언
}
- 리액드의 state 개념 : 멤버변수 + 메소드
- 접근 지정자
- private : 클래스 내부에만 접근 가능, 외부에선 절대 접근 불가
- public : 누구나 접근 가능
객체 선언
- 객체 : 클래스를 통해 선언한 변수
- 클래스이름 변수이름 + new
Dog a = new Dog();
- new : 동적 메모리 할당, 힙메모리 (malloc과 비슷)
- 객체 생성시 반드시 new 연산자 사용
- 사이즈는? 프로그램에서는 객체를 자동 계산해 할당
- 변수 a에는 4바이트만 할당됨 / 주소값을 저장하는 것
- a 자체가 객체X, 포인터 변수(편의상 a를 객체라고 하는 것)
생성자(초기화 전용 메소드)
: 모든 변수는 선언이 되면 값을 초기화해야 함
: 객체도 본질적으로 변수이므로 초기화 필요
: 객체 생성 시 초기화 전용 메소드를 제공하는데 바로 생성자 (constructor)
: 객체 생성 시 자동으로 호출되는 메소드
- 클래스이름과 동일
- 리턴 타입 필요 X
public 클래스이름() {}
상속성
: 이미 완성된 클래스를 다른 클래스에 상속 가능
- 위로갈수록 추상적, 아래로 갈수록 구체적
접근_지정자 클래스_이름 : 부모_클래스
{
//멤버 목록
}
- js, ts 는 : 대신 extends 붙임
-부모의 private는 자식이 사용할수 없음
-> private 대신 protected 사용
-> protected 속성은 외부에서 사용 불가, 하지만 자식은 사용 가능!
'데브코스 > 강의 정리' 카테고리의 다른 글
리터럴, any, 유니온, array, tuple (0) | 2024.10.29 |
---|---|
오버로딩, 오버라이딩, 인터페이스, 람다 (2) | 2024.10.28 |
함수 포인터, 구조체, 열거형, 동적 메모리 할당 (0) | 2024.10.28 |
연산자, 조건문, 반복문, 함수, 변수의 범위, 배열, 포인터 (0) | 2024.10.24 |
프로그래밍의 기본 원리-변수와 자료형 (1) | 2024.10.23 |