공부/C#

[C#] OOP 객체 지향, 4대 특징 중 캡슐화와 프로퍼티

굴러다니다니 2025. 5. 22. 14:02

객체 지향 프로그래밍 OOP

객체: 속성과 동작

객체 지향 프로그래밍(Object-Oriented Programming): 객체 위주로 프로그래밍 하는 것

 

 

절차적 프로그래밍: 기능 구현에 초점, 함수를 역할별로 나누어 개발

  • 데이터 접근이 쉬움
  • 문제점) 이곳 저곳에서 데이터에 접근해 유지보수가 어려움
  • 문제점) 스케일이 커지며 관리가 어려워짐

 

객체 지향 프로그래밍: 객체를 역할별로 나누어 개발

  • 클래스가 데이터를 보호해 데이터 접근이 어려움
  • 스케일이 커져도 관리가 쉬움
  • 문제점) 제한적으로 데이터에 접근시키려 객체화로 설계하는 부분이 비교적 어려움

 

객체화: 속성과 동작을 정의

클래스: 객체화 시킨 개념을 프로그래밍하기 위한 정의서, 각 칼럼에 적당한 데이터 타입과 제한 접근을 지정

인스턴스: 생성된 객체


객체 지향의 4대 특징

캡슐화 (Encapsulation)

클래스에 포함된 변수와 메소드를 다른 객체로부터 접근 제한을 설정해 보호

 

추상화 (Abstraction)

다형성 (Polymrphism)

상속성 (Inheritance)


접근 제한)

public, protected: 자식 클래스까지 공개, private: 비공개, 생략시 자동으로 private

 

+ 이름은 공개, 수정은 비공개로 하려면?

이름을 반환하고 변경하는 메소드를 따로 만들기

GetName -> private인 name 변수를 return 하는 public 함수

SetName -> private인 name 변수의 값을 매개변수 name의 값으로 바꾸는 private 함수

 

모든 변수에 대해 get, set 함수를 만들어줬지만 변수가 생길때마다 이를 해줘야 한다 (So 귀찮)

=> 프로퍼티 사용

 

프로퍼티(Property): 멤버 변수와 메소드를 동시에 만듦

get; -> GetName 함수와 동일, set-> SetName 함수와 동일

get, set에 각각 접근 제한자를 정해줄 수 있음

접근 제한자를 안 쓴다면, 해당 멤버 변수의 접근 제한자가 지정

ex) name의 get은 생략해서 public이 됨

get, set을 생략한다면 Get(), Set() 메소드를 안 만든것과 동일

s.name = "가렌" 인 부분에서 set 프로퍼티가 사용됨 

* name의 set은 private이라 사실 가렌으로 변경이 불가능

s.name == "니달리" 인 부분에서 get 프로퍼티가 사용됨

* name의 get이 public이라 이름을 가져올 수 있음

 

프로퍼티 커스텀이 가능

get 프로퍼티는 값을 무조건 반환해줘야됨

set 프로퍼티에서는 입력받은 값을 value로 알 수 있음]

 

프로퍼티의 제일 큰 장점: 선언은 변수처럼 사용은 함수처럼 가능하다는 점

 

인덱서 (Indexer)

인덱스를 이용해 객체 내의 데이터에 접근할 수 있는 프로퍼티, 객체를 배열처럼 사용 가능

실행시 3 / 인덱스 초과 / 인덱스 초과 / 0이 나온다

 

+ 다음 내용

https://dani2344.tistory.com/143

 

[C#] 객체 지향 추상화, 상속성, 다형성

이전 내용:https://dani2344.tistory.com/142 [C#] OOP 객체 지향, 4대 특징 중 캡슐화와 프로퍼티객체 지향 프로그래밍 OOP객체: 속성과 동작객체 지향 프로그래밍(Object-Oriented Programming): 객체 위주로 프로그

dani2344.tistory.com

 

728x90
반응형