[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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바