JAVA

클래스-객체 지향 프로그래밍

으노방 2020. 7. 31. 09:19

사용이유

  • 코드의 재사용, 코드 중복 방지를 위해 사용함
  • 과거엔 규모가 큰 프로젝트는 함수 중심으로 개발함
    • 데이터가 방대해지고 복잡해져서 추후 개선이 어려움
    • 코드 중복, 협업시 문제가 발생하는 등 복잡해짐

클래스 중심

  • 데이터 중심 => 객체로 관리
  • 코드의 재사용, 코드 중복 방지, 유지보수, 대형 프로젝트에 사용 가능

일반적인 코딩

  • 하나의 형태를 만들고, Copy And Paste(복사 붙여넣기)로 추가 요소를 생성함
  • 스마트폰이 증가될수록 코드가 길어지게 됨
  • 스마트폰과 스마트폰 정보를 출력하려면 같이 출력해야 함

객체 지향 프로그래밍 살펴보기

  • 구조 설계한 후, 재사용성 증가
  • 코드 반복 최소화
  • 다양한 매직 메소드 활용할 수 있음
  • 네임스페이스
    • 변수가 객체를 바인딩할 때, 그 둘 사이의 관계를 저장하고 있는 공간
    • a=2라고 할 때, 변수가 2라는 객체가 저장된 주소를 가지고 있는 상황
    • 파이썬의 클래스는 새로운 타입(객체)을 정의하기 위해 사용되고, 모듈과 마찬가지로 하나의 네임스페이스를 가짐

1. __int__ : 클래스 인스턴스 생성시 초기화하며 실해되는 부분

https://terms.naver.com/entry.nhn?docId=3532994&cid=58528&categoryId=58528

인스턴스란?

- 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체를 말한다

- 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것

  • class의 값을 보고 싶으면 __dict__을 사용
    • 네임스페이스를 확인
  • python class str method
    • __str__ 매직 메소드가 구현되어 있지 않은 상태에서 인스턴스를 print하면 object가 나옴
    • 비공식적으로 print문으로 출력하는 사용자 입장의 출력
    • print() 또는 str() 함수가 호출될 때 사용 - 기본적으로 str 메소드가 먼저 실행되며, str 메소드가 없으면 repr 메소드를 실행함
  • __repr__ : str과 비슷
    • 개발, 엔지니어 레벨에서 객체의 엄격한 타입을 표현할 땐 이 메소드를 사용
    • 객체 표현을 반환함
    • repr() 함수가 호출될 때 사용
  • dir method
    • 해당 인스턴스가 가진 모든 attribute를 list 형태로 보여줌(값을 보여주진 않음)
  • __dict__
    • 특정 네임스페이스만 보고 싶다면, __dict__를 사용
  • __doc__
    • docstring을 출력
class Queue(list):
    """
    enqueue: 큐 뒤쪽에 항목을 삽입
    dequeue: 큐 앞쪽의 항목을 반환하고, 제거
    peek   : 큐 앞쪽의 항목을 조회
    empty  : 큐가 비어 있는지 확인
    size   : 큐의 크기를 확인
    """
    
    def __init__(self):
        self.items = []
    
    def isEmpty(self):
        return not bool(self.items)
    
    def enqueue(self, item):
        self.items.insert(0,item)
    
    def dequeue(self):
        value = self.items.pop()
        if value is not None:
            return value
        else:
            print ('Queue is empty')
    
    def size(self):
        return len(self.items)
    
    def peek(self):
        if self.items:
            return self.items[-1]
        else:
            print ('Queue is empty')
    
    def __repr__(self):
        return repr(self.items)
  • self란?
    • self는 자기 자신을 뜻함. 인스턴스 자신
      • 인스턴스 : 클래스에 의해 만들어진 객체
    • self가 있는 것이 인스턴스 변수
    • 인자에 self를 받는 것은 인스턴스 메소드
  • 인스턴스의 __class__는 사용된 클래스를 출력함

클래스 변수

  • 클래스 내부에 선언된 변수
  • 클래스 변수는 클래스의 네임스페이스에 위치함
  • 모든 인스턴스가 공유하는 변수

인스턴스 변수

  • self.name 같이 self가 붙은 변수
  • 인스턴스 변수는 인스턴스의 네임스페이스에 위치함
  • 인스턴스 네임스페이스에서 없으면 상위에서 검색
  • 즉, 동일한 이름으로 변수 생성 가능(인스턴스 검색 후 => 상위 클래스, 부모 클래스 변수)