-
[TIL]C#문법 2TIL 2024. 4. 23. 17:50
객체지향 언어의 특징 (OOP)
1.캡슐화(Encapsulation)
- 관련된 데이터와 기능을 묶음
- 정보를 은닉하고 외부에서의 접근을 제한해 안정성과 유지보수성을 높인다.
2.상속(Inheritance)
- 부모 클래스에게서 특성과 동작을 자식이 상속받아 재사용할 수 있다.
- 코드의 중복을 줄이고 구조화와 유지보수를 용이하게 한다.
더보기부모 클래스의 멤버에 접근 가능
재정의 가능(다형성 충족)
상속의 계층 구조 형성(자식에게 상속을하고 또 자식의 자식에게 가능)
부모의 접근제한자에 따라 자식이 접근할수 있는게 달라진다.
3.다형성(Polymorphism)
- 하나의 인터페이스나 기능을 다양한 방식으로 구현하거나 사용
- 유연하고 확장 가능한 코드 작성을 가능하게 해 코드의 가독성과 재사용성을 높인다.
더보기같은 타입이지만 다양한 동자글 수행할 수 있는 능력
1. 가상(virtual)클래스와 메서드
기본적으로 부모 클래스에서 정의되고 자식클래스에서 재정의할 수 있는 메서드
자식 클래스에 필요에 따라 재정의 가능
2.추상(Abstract) 클래스와 메서드
직접적으로 인스턴스를 생성할 수 없다
베이스 클래스로 사용
추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 함
4.추상화(Abstraction)
- 복잡한 시스템이나 개념을 단순화하여 필요한 기능에 집중
- 세부 구현내용을 감추고 핵심 개념에 집중해 코드의 이해와 유지보수를 용이하게 함
5.객체(Object)
- 클래스로부터 생성된 실체, 데이터와 해당 데이터를 조작하는 메서드를 가짐
- 객체들 간의 상호작용을 통해 프로그램 동작, 모듈화와 재사용성을 높인다.
- 각 객체는 독립적인 상태를 가지고 객체마다 고유한 데이터를 가질 수 있다.
붕어빵 틀로 비유하자면 객체는 붕어빵이라고 할 수 있다.
맛있겠다구조체 VS 클래스
구조체와 클래스 모두 사용자 정의 형식을 만드는데 사용
구조체는 상속 받을 수 없지만, 클래스는 단일 상속 및 다중상속 가능
구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합, 클래스는 더 복잡한 객체 표현
접근제한자
클래스의 접근 권한을 지정하여 데이터를 보호할 수 있다.
Public: 외부에서 자유롭게 접근 가능
Private: 같은 클래스 내부에서만 접근가능
Protected:같은 클래스 내부와 상속받은 클래스에서만 접근 가능
클래스의 구성요소
필드와 메서드
필드: 클래스 내부에 선언되어 있는 변수
메서드: 클래스 내부에 선언되어 있는 함수
생성자와 소멸자
생성자
객체가 생성될 때 호출되는 특별한 메서드
객체를 초기화하고, 필요한 초기값을 설정
클래스와 동일한 이름을 가짐
객체를 생성할 때 new와 함께 호출
생성자는 여러개 정의, 매개변수의 개수와 타입에 따라 다른 생성자 호출=오버로딩
매개변수가 없으면 자동으로 생성되지만, 직접 정의한 생성자가 있는 경우 자동으로 생성되지 않는다.
소멸자
객체가 소멸되는 시점에서 자동으로 호출되는 특별한 메서드
클래스와 동일한 이름을 가짐, 이름 앞에 ~기호를 붙여 표현
C#은 가비지 컬랙터에 의해 관리되므로, 명시적으로 소멸자를 호출하는 것은 일반적으로 권장되지 않는다.
프로퍼티
클래스의 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자 메서드 조합
get set 접근자를 사용하여 값을 읽고 설정하는 동작 정의
오버라이딩과 오버리딩
오버라이딩(덮어쓰기)
부모클래스에 이미 정의된 메서드를 자식 클래스에서 재정의
부모클래스의 메서들를 재정의
오버로딩(읽어오기)
동일한 메서드 이름을 가지고 있지만 타입이나 개수, 순서가 다른 메서드를 정의하는 것
제너릭
클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있다.
코드의 재사용성을 높일 수 있음
C# <T> 형태의 키워드를 이용하여 선언(사용할 때는 <T>대신 구체적인 자료형 넣어줘야함)
리스트나 스택같은 자료형을 사용자 정의로 만드는것 같다.
out, ref 키워드
메스드에 매개변수를 전달할 때 사용
메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용
원래 다른 함수에 매개변수로 전달할 때 선언된 변수에 직접적인 영향을 주지 못했었다.
그러나 매개변수를 out 또는 ref형태로 전달하게 되면 함수가 실행이 끝나고 선언된 변수에 반영된 값이 적용된다.
차이점과 주의할 점
out: 반드시 메서드 내에서 값을 할당해야한다.
ref: out보다 빠르다, 그러나 너무 많이 ref로 전달하면 가독성이 떨어지고 유지보수가 어려워진다.
잘 몰라서 그냥 변수를 함수밖에 static으로 선언해버렸었는데 이제 알다니 ...
'TIL' 카테고리의 다른 글
[TIL]C# 강의 과제 정리 (2) 2024.04.25 [TIL]C#문법3 (0) 2024.04.24 [TIL]C#문법1주차(수정중) (0) 2024.04.23 [TIL] 2024-04-18 협업툴 사용 (0) 2024.04.18 [TIL]2024-04-17 GitHub (1) 2024.04.17