구조체 그룹 : 정수형, 실수형, 문자형, 배열, 포인터
사용하는 이유 : 연관된 변수들을 하나로 묶어서 관리함으로써 데이터 관리에 유용하다.
데이터 양(변수의 개수)이 많아지면 구조체가 유리하다.
struct 키워드는 구조체라는 데이터타입을 의미
구조체 변수를 통해 구조체 멤버의 값을 참조해야하는데,
멤버에 접근 시 .을 사용하는데, 이를 직접 접근 이라고 한다.
ex) st1.name, st1.age, st1.height
[구조체 변수명].[구조체 멤버]
공용체(union)
공용체도 사용자 정의 자료형이다.
구조체와의 차이점은 메모리 공간을 공유한다는 점이다.
열거형(enum)
열거형은 enumeration의 약자로 enum이라고 읽는다.
enum Week {
sun : 1,
mon,
tue,
wed,
thu,
fri,
sat,
};
이런 식으로 사용할 수 있는데, 이러면 초기값으로 1부터 1씩 증가가 된다. mon은 2, sat은 7이 된다.
중간에 wed = 100, 이렇게 넣으면 그때부터는 목요일은 101이 된다.
동적 메모리 할당
동적 메모리 할당 함수의 원형
void* malloc(size_t size);
자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 방법입니다. 프로그램에서 데이터를 어떻게 조직하고 저장할지 결정하는 것으로, 적절한 자료구조를 선택하면 프로그램의 성능을 크게 향상시킬 수 있습니다. 자료구조는 크게 선형 구조와 비선형 구조로 나뉘며, 각각의 특징과 용도가 다릅니다.
추상화는 복잡한 시스템에서 핵심적인 개념이나 기능만을 추출하여 단순화하는 과정입니다. 자료구조에서 추상화란 구현의 세부사항은 숨기고, 사용자에게 필요한 기능만을 제공하는 것을 의미합니다. 예를 들어, 스택이라는 자료구조를 사용할 때 내부적으로 배열이나 연결 리스트로 구현되어 있는지 몰라도 push, pop 같은 기능만 알면 사용할 수 있습니다.
클래스는 객체지향 프로그래밍에서 데이터와 그 데이터를 처리하는 메서드를 하나로 묶은 설계도입니다. 자료구조를 구현할 때 클래스를 사용하면 데이터의 캡슐화와 추상화를 실현할 수 있습니다. 클래스는 속성(변수)과 메서드(함수)로 구성되며, 이를 통해 재사용 가능하고 유지보수가 쉬운 코드를 작성할 수 있습니다.
생성자 만들기 규칙
1. 생성자는 클래스의 이름과 동일 해야해.
2. 리턴 타입이 없기때문에 void를 붙일 필요 없어.
상속성은 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받는 객체지향 프로그래밍의 핵심 개념
1. 상속을 통해 코드의 재사용성을 높이고 계층적 관계를 표현할 수 있습니다. (protected 로 표현)
예를 들어, 일반적인 리스트 클래스를 만들고, 이를 상속받아 스택이나 큐와 같은 특수한 리스트를 만들 수 있습니다. 부모 클래스의 기능을 그대로 사용하면서 필요한 기능만 추가하거나 수정할 수 있습니다.
오버로딩은 같은 이름의 메서드나 함수를 매개변수의 개수나 타입을 다르게 하여 여러 개 정의하는 것입니다. 이를 통해 같은 기능을 다양한 방식으로 수행할 수 있습니다. 예를 들어, 리스트에 요소를 추가하는 add 메서드를 만들 때, 하나의 요소를 추가하는 add(item)와 특정 위치에 추가하는 add(index, item)을 모두 정의할 수 있습니다.
오버라이딩은 상속받은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다. 부모 클래스의 메서드 이름과 매개변수는 동일하게 유지하면서, 내부 구현만 변경하여 자식 클래스에 맞는 동작을 수행하도록 합니다. 예를 들어, 동물 클래스의 소리내기 메서드를 상속받은 개 클래스에서 "멍멍"을 출력하도록 재정의할 수 있습니다.
인터페이스는 클래스가 구현해야 하는 메서드들의 명세를 정의한 것입니다. 구현 내용 없이 메서드의 이름, 매개변수, 반환 타입만 선언하며, 이를 구현하는 클래스는 반드시 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 인터페이스를 사용하면 서로 다른 클래스들이 동일한 메서드를 제공하도록 강제할 수 있어, 일관된 사용 방법을 보장합니다. 자료구조에서는 List, Stack, Queue 같은 추상적 개념을 인터페이스로 정의하고, 다양한 방식으로 구현할 수 있습니다.
람다식 표현
(인수) => 표현식 또는 명령문