[PYTHON] 클래스(Class)

2023. 7. 3. 09:53·PYTHON

객체지향프로그래밍(OOP : Object Oriented Programming)
 - 객체 중심의 프로그램을 작성하는 방식
 - 객체 끼리의 상호 작용을 통하여 프로그램을 작성하는 방식
 
 - 부품화
 - 캡슐화 == 클래스
  - 속성과 기능을 하나의 블록으로 묶은 것
 - 정보은닉
  - 속성과 기능을 보호하기 위해서 접근을 제한하는 것
  - 프로그램의 안정적 구현을 위해서
 - 상속성
  - 클래스 끼리 물려 주거나 물려받는 것
 - 다형성
  - 다양한 형태나 성질
  - 하나의 객체를 여러개의 클래스로 표현하는 것들

객체(Object)
 - 사전적인 의미로는 현실세계에 존재하는 모든 것들 하나의 대상체들
 - 어떤 대상을 표현하기 위한 정보(속성)를 저장할수 있는 공간과 그 공간을 컨트롤 할 수 있는 기능(메소드)을 하나의 루틴으로 묶은
   개별적인 개체로써 표현되는 변수
 - 클래스라는 사용자 정의 자료형으로 만들어진 변수
 
클래스
 - 어떤 대상을 표현하기 위한 정보(속성)를 저장할수 있는 공간과 그 공간을 컨트롤할수있는 기능(메소드)을 하나의 블록으로
   묶어서 정의한 사용자 정의 자료형

 - 클래스의 구성요소
  - 속성 + 기능 + 보안(정보은닉)
  - 멤버변수 + 멤버메소드 + 접근지정자 = class (사용자 정의 자료형)

 - 클래스 상세 구조
  class 클래스명:
    클래스정의
    멤버변수 - 데이터저장공간

    멤버 메소드 - 클래스의 기능
     - 생성자 - 클래스 객체 생성시 단 한번만 호출되는 메소드 - 객체의 초기 설정
     - 소멸자 - 클래스 객체 소멸시 단 한번만 호출되는 메소드 - 객체 정리
     - setter - 멤버 변수의 값을 셋팅하는 메소드
     - getter - 멤버 변수의 값을 반환 하는 메소드
     - user 메소드 - 사용자 필요에 의해 만들어지는 메소드

※ 클래스명은 클래스의 성격이 연상되는 단어로 이름을 지어준다

 

# 생성자 - __init__
# - 객체 생성시 단 한번만 호출되는 멤버 메소드
# - 객체 초기 설정을 위해서 사용한다
#    멤버변수 생성 다른 객체의 값 셋팅
# - 객체 생성 순서
#   - 공간 할당 -> 생성자 호출
# 생성자는 우리가 정의 하지 않으면 자동으로 만들어진다 
# 코드가 없다 
# 아무런 기능이 없다
#  - 객체 생성 순서 유지를 위해서 만들어진다

# -> None - 반환값의 형태를 명시하는 부분
#    - 반환값이 없다

# self
# - 자기 자신을 호출한 인스턴스공간의 정보를 저장하는 참조형변수
# - 멤버 메소드에서만 사용 가능한 매개변수
# - 멤버 메소드라면 반드시 적혀야 한다
# - 인자값은 넣지 않아도 자동으로 참조된다
# - 멤버를 참조하기위한 참조형변수

class Info:
    
    #생성자에서 셋팅할 데이터가 필요하다면 매개변수로 받아서 넣어주면 된다(self는 반드시 적어야 함)
    def __init__(self,name = None,age = 0) -> None: # None은 자바의 void와 같은 성격
        print("생성자 호출")
        self.name = name    # 멤버 변수 선언 - self를 통하여 선언해주어야 한다
        self.age = age
        
a = Info(1,2,3,3,4,5)

print(id(a))

print(a.name)
class Info:
    
    count = 0 
    # 클래스 멤버변수 - 클래스 전체의 객체가 공유하는 변수공간 - static이랑 비슷
    # 모든 객체 통틀어 하나의 멤버변수 공간이 만들어진다
    # 모든 객체가 하나의 공간을 참조하게 된다
    # 이 클래스의 첫 객체가 만들어질때 만들어진다
    # 항상 클래스를 통하여 접근하여야 한다

    def __init__(self,name = None,age = 0) -> None:
        print("생성자 호출")
        Info.count += 1
        self.name = name # 인스턴스 멤버 변수
        self.age = age

    def disp(self):
        print(Info.count) # 권장방식
        #print(self.count) # 비권장방식
        print("이름 : {}".format(self.name))
        print("나이 : {}".format(self.age))
        self.count = 3
        #print("키 : {:.2f}".format(self.height))

#print(Info.count)


a = Info("김코딩",20)

#a.height = 177.4# 멤버변수 선언

a.disp()
print("===") #구분선

b = Info("신코딩",27)
a.disp()
print("===") #구분선
#b.hei = 178
a = Info("김코딩",20)

a.disp()
print("===") #구분선
#접근 제한자(지정자, 제어자)
# - 클래스의 멤버를 접근을 단계적으로 제한할수 있는 키워드
# - 정보은닉을 위해서 사용한다
# - 멤버명 앞에 붙여서 적어주면 된다

#종류
# - private - __
#  - 클래스 내부에서만 접근 가능함 그외의 외부에서는 모두 접근 불가
#  - 일반적으로 별다른 제약이 없으면 멤버 변수는 private으로 설정된다

# - protected - _
#  - 상속받은 클래스에서는 접근 가능함 그외의 외부에서는 접근 불가
#  - 실제 런타임상의 제약사항이 아니다
#  - 잘 사용되지 않는 접근 지정자

# - public - X
#  - 클래스 내부와 외부 모두 접근 가능
#  - 기본 디폴트 값
#  - 일반적으로 별다른 제약이 없으면 멤버 메소드는 public으로 설정된다

# 데코레이터(자바의 어노테이션과 비슷함)
# - 바로 아래에 있는 영역에 강제적인 의미를 부여하는 키워드
# - @뒤에 알맞은 키워드를 함께 적고 밑에 코드를 구현하면 된다

# setter - 멤버변수의 값을 셋팅하는 메소드
# 1.메소드를 통한 접근
#  - def set_멤버변수명(매개변수):
#               코드 정의 
# 2.데코레이터를 사용하는 방식
#   @멤버변수명.setter
#   def 멤버변수명(self,매개변수):
#       코드 정의
# getter - 멤버변수의 값을 반환 하는 메소드
# 1.메소드를 통한 접근
#  - def get_멤버변수명():
#          return 멤버변수
# 2.데코레이터를 사용하는 방식
#   @property
#   def 멤버변수명(self):
#       return self.멤버변수명

# property
#  - 클래스의 멤버변수


class Info:

    def __init__(self,name = None,age = 0) -> None:
        print("생성자 호출")
        self.__name = name 
        self.set_age(age)
        #self.__age = age

    #setter
    def set_age(self,age):
        if age < 1:
            print("나이를 잘못입력하셨습니다.")
            self.__age = 1
            return
        self.__age = age
 
    #getter
    def get_age(self):
        return self.__age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name:str):
        if name.__len__() < 2:
            print("이름은 두글자 이상입니다.")
            return
        self.__name = name

    def setData(self,name,age):
        self.__name = name
        self.set_age(age)
        # if age < 1:
        #     print("나이를 잘못입력하셨습니다.")
        #     self.__age = 1
        #     return
        # self.__age = age

    def disp(self) -> None:
        print("이름 : {}".format(self.__name))
        print("나이 : {}".format(self.__age))

a = Info("김코딩",-20)

#print(a.name)
#print(a.__age)

#a.set_age(-30)
#print(a.get_age())

a.name = "이"

print(a.name)

#a.setData("이름없음",-50)

a.disp()
저작자표시 (새창열림)

'PYTHON' 카테고리의 다른 글

[PYTHON] 상속  (0) 2023.07.05
[PYTHON] 클래스(소멸자)  (0) 2023.07.04
[PYTHON] 디폴트 매개변수  (0) 2023.07.03
[PYTHON] dictionary  (0) 2023.06.30
[PYTHON] list와 tuple  (0) 2023.06.29
'PYTHON' 카테고리의 다른 글
  • [PYTHON] 상속
  • [PYTHON] 클래스(소멸자)
  • [PYTHON] 디폴트 매개변수
  • [PYTHON] dictionary
whkim98
whkim98
꾸준히 내 것으로 만드는 게시글을 작성하자
  • whkim98
    내 일기장
    whkim98
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • Project
        • Insty
        • ERP
      • Cloud
        • NAVER CLOUD Web DevOps
        • Public
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
        • 리눅스마스터
        • AWS
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
      • DevOps
  • 블로그 메뉴

    • 홈
    • GitHub
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    코딩
    html
    Postman
    코테
    정보처리기사
    프로그래머스
    django
    eGov
    javascript
    AdSP
    js
    해시 암호화
    코딩테스트
    RDBMS
    SQLD
    web
    github
    Tomcat
    node
    gitbash
    Java
    AWS
    annotation
    React
    spring
    Python
    Cloud
    CORS
    jsp
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
whkim98
[PYTHON] 클래스(Class)
상단으로

티스토리툴바