2024년 10월 25일
함수 포인터의 사용 (함수를 포인터처럼 사용할 수 있는 기능)
자바스크립트에서는 함수를 변수에 대입하는 경우가 많은데, 그 원리가 함수 포인터임
함수 포인터의 사용 이유
하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 데이터 타입을 저장하는 것
구조체도 데이터 타입이고, 내가 만든 타입임
클래스의 원조가 구조체임 → 따라서 클래스도 데이터 타입임
구조체를 사용하는 이유
예를 들어, 학생 정보 관리 시스템이라고 가정하면
구조체 정의하기
구조체의 기본 형태 (학생정보)
구조체 student는 사용자인 내가 정의한 새로운 데이터 타입이다.
선언된 구조체 변수의 형태
구조체 멤버에게 접근하기
공용체
열거형
메모리 영역
코드 영역 - 실행할 명령어들이 순서대로 쌓인다. CPU가 이 영역에서 명령어들을 하나씩 가져다 처리한다.
스택 영역 - 스택이란 모든 원소들의 삽입, 삭제를 한쪽 방향에서만 수행하도록 하는 선형 자료구조이다. 이를 후입선출방식(LIFO)라고 한다. 나중에 들어온 녀석이 먼저 빠져나간다는 뜻이다.
힙 영역 - 큐. 힙은 컴퓨터 메모리의 일부가 할당되었다가 회수되는 일들의 반복.
데이터 영역 - 전역변수와 static 변수가 저장되는 메모리 영역. 이 메모리는 프로그램 종료 시 실행.
동적으로 메모리를 할당하는 이유
동적 메모리 할당 및 해제
왜 객체지향 철학을 이해해야 하는가
객체 지향이란
구조적 프로그래밍과 객체 지향 프로그래밍
추상 : 대상에서 특징만을 뽑아낸 것
우리 일상의 사물들은 관념적이고 추상적인 것들이 많다.
플라톤의 이데와(Idea)는 추상화 개념과 일맥 상통한다.
객체 지향의 추상화 : 사물의 공통점을 묶는 것
은닉하다, 숨긴다는 의미
캡슐화한다는 것은 외부에서 그 내부를 볼 수 없게 한다는 의미.
마냥 숨기기만 한다면 데이터는 무용지물임
외부로부터 데이터를 조작할 인터페이스가 필요
하나의 캡슐단위를 클래스라고 할 수 있음
클래스란
클래스의 구성
클래스의 선언 형식
접근 지정자
객체의 선언
객체의 생성
모든 변수는 선언이 되면 값을 초기화 해야 한다.
객체도 본질적으로 변수이므로 선언되면 초기화 해야 한다.
객체 생성 시 초기화 전용 메소드를 제공하는데, 바로 생성자(constructor)이다.
객체 생성시 자동으로 호출되는 메소드
생성자 함수는 new 연산자를 호출할 때(객체가 생성됐을 때) 자동으로 호출함
객체지향 철학의 이해
오버로딩
인터페이스란 메소드의 목록만을 가지고 명세(Specification), 사용자 정의 타입이다.
메소드의 목록만 선언하고 구현은 하지 않는다. (스펙만 작성하고, 구현은 안함)
인터페이스는 어떤 클래스에게 상속받아야 하고 독립적으로 쓸 수 없음
인터페이스의 선언 형태
인터페이스를 상속받는 클래스의 형태
인터페이스를 사용하는 이유
클래스를 상속 하는 경우
인터페이스를 상속 하는 경우
인터페이스 코드 작성
메모리 관리
플랫폼 기반의 객체 지향 언어는 가비지 컬렉터가 메모리를 자동 관리한다.
백그라운드에서 더이상 사용 되지 않는 메모리를 찾아 회수한다.
*빈 공간 발생: 단편화 현상
콜백 메소드(함수)를 익명 메소드를 정의하는 이유는 이벤트 기반에서 이벤트 발생시에 미리 등록된 함수를 호출하는 구조이기 때문에 굳이 이름이 필요 없음
익명 메소드
람다식 (문법임)
람다식 표현