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를 받는 것은 인스턴스 메소드
- self는 자기 자신을 뜻함. 인스턴스 자신
- 인스턴스의 __class__는 사용된 클래스를 출력함
클래스 변수
- 클래스 내부에 선언된 변수
- 클래스 변수는 클래스의 네임스페이스에 위치함
- 모든 인스턴스가 공유하는 변수
인스턴스 변수
- self.name 같이 self가 붙은 변수
- 인스턴스 변수는 인스턴스의 네임스페이스에 위치함
- 인스턴스 네임스페이스에서 없으면 상위에서 검색
- 즉, 동일한 이름으로 변수 생성 가능(인스턴스 검색 후 => 상위 클래스, 부모 클래스 변수)