객체(Encapsulation)
- 데이터 + 프로시저
- 독자성(Indentity) : 객체는 다른 객체와 구분
- 상태(State) : 객체의 상태(객체만의 데이터)
- 행동(Behavior) : 객채의 행동(메소드, 프로시저)
- 실세계 객체를 모델링해서 소프트웨어 객체 생성
캡슐화(Encapsulation)
- 내부 정보 은닉화
- 외부에서 객체 내부의 데이터를 함부로 접근 불가
- 객체 내부를 몰라도 객체 사용가능
- 간결한 코드 작성 : 내부 아키텍처를 몰라도 공개된 인터페이스만 알면 코딩 가능
- 모듈화 : 모든 내부 코드가 객체 내에 기술
- 정보은닉 : 객체내 데이터는 공개된 메소드를 통해서만 제어 가능
메시지(Message)
- 객체끼리 주고 받는 명령 혹은 정보(통신)
- 파라미터를 통해 출력결과를 다양하게 반환
- 객체의 메소드
- 모든 기능을 하나의 객체에 집중할 필요 없음 -> 특정 기능 필요시 그 객체와만 대화
객체 & 클래스
- 클래스는 객체에 대한 설계도
클래스 & 인스턴스
- 인스턴스는 클래스를 실제 구현한 객체
- 인스턴스로 객체 생성시 다양한 객체를 생성(Indentity, State...)
클래스 상속(Inheritance)
- 슈퍼클래스(Super Class) : 자신을 상속하는 클래스(부모클래스, 기본클래스)
- 서브클래스(Sub Class) : 상속을 받는 클래스(자식클래스, 파생클래스)
- 서브클래스는 슈퍼클래스의 변수 및 메소드를 상속받는다
- 상속 전의(Transition) : 부모의 메소드를 자식, 손자, 증손자에게 계속 전달
다형성(Polymorphism)
- 클래스는 다양한 형태를 가질 수 있다.
- 오버라이딩(Overridion), 오버로딩(Overloadiong)
- 중복정의 or 재정의를 통해서 구현
클래스(Class)
클래스멤버(Class Member)
- 클래스를 구성하는 요소
- 필드(Field) : 필드 or 멤버변수
- 메소드(Method) : 객체행동
- 프로퍼티(Property) : 특성, 속성,.. 밖에서 보기엔 멤버 변수지만, 내부적으로 메소드
- 상수(Constant) : 읽기전용
- 인덱서(Indexer) : 스마트 배열
- 이벤트(Event)
- 연산자(Operator) : 연산자 오버로딩
접근제한자(Access modifier)
- 클래스 멤버의 보안제어
- 캡슐화, 내부은닉화
- public, private, protected, internal
public
- 클래스 멤버를 공개하고자 할때..(인터페이스)
- 보통 데이터는 은닉화, 메소드는 공개
- 누구나 사용가능, 클래스 내부, 파생 클래스, 클래스 외부
private
- 멤버를 포함한 클래스 내부에서만 접근가능
- 가장 엄격한 수준의 접근 제한자
- 보통 데이터의 접근 제한자.
protected
- 클래스 내부와 파생클래스에서만 접근가능
- 클래스 자신과 파생 클래스(상속받은 클래스)에서만...
- 반드시 동일어셈블리는 아니다.
internal
- 동일 어셈블리내에서 접근가능
- 외부에서 참조할 일이 없을 경우(참조해선 안되는 경우)
- 내부에서만 사용해야 하는 경우
protected internal
- 동일 어셈블리안에 있는 파생 클래스에서만 가능
기본 접근 제한자
- class : private
- 멤버 : private
- struct : private
- enum : public
- interface : public