데브코스/강의 정리

객체 지향, 추상화, 캡슐화, 클래스, 생성자, 상속성

케케_ 2024. 10. 28. 13:33

객체 지향에 대한 이해

 

객체 지향? 이 세상에 모든 사물들을 프로그래밍화 시키겠다!

 - 객체 : 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 속성은 외부에서 사용 불가, 하지만 자식은 사용 가능!