1. 네임스페이스(namespace, 이름공간) (중요도🌟🌟🌟)

: 변수가 객체를 바인딩할 때 그 둘 사이의 관계를 저장하고 있는 공간 (바인딩: 구체적인 값을 할당하는 것)

ex. a = 2
==> a라는 변수가 2라는 객체가 저장된 주소를 가지고 있고, 그러한 연결 관계가 저장된 공간이 바로 네임스페이스

 

프로그래밍 언어에서 특정한 객체(Object)를 이름(Name)에 따라 구분할 수 있는 범위를 의미. 파이썬 내부의 모든 것은 객체로 구성되며, 이들 각각은 특정 이름과의 매핑 관계를 갖게 되는데 이 매핑을 포함하고 있는 공간을 네임스페이스라고 한다.

 

 

네임스페이스가 필요한 이유

프로그래밍을 수행하다보면 모든 변수 이름과 함수 이름을 정하는 것이 중요한데 이때 중복되지 않게 설정해줘야 함.

따라서 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한함.

즉, 소속된 네임스페이스가 같은 이름이 다른 개체를 가리키도록 하는 것이 가능해짐.

dir 내장함수의 결괏값을 통해 알 수 있음
클래스 또는 인스턴스에 대한 네임스페이스를 확인하려면 __dict__속성을 확인

전역 네임 스패이스 : 모듈별로 존재하며, 모듈 전체에 통용되는 이름을 사용한다.
지역 네임 스페이스 : 함수 및 메소드 별로 존재하며, 함수 내의 지역 변수들이 소속된다.
빌트인 네임 스페이스 : 기본 내장 함수 및 기본 예외들의 이름을 저장하는 

 

 

 

2. 클래스 변수(class variable) (중요도🌟🌟)

클래스 변수 선언하는 방법 : 클래스 내부에 변수 설정
클래스 변수를 변경할 때는 항상 클래스명.클래스 변수 형식으로 변경

 

 

 

3. 인스턴스 변수(instance variable) (중요도🌟🌟)

: self.name과 같이 self가 붙어 있는 변수를 인스턴스 변수

 

 


4. 메서드

 : 특정 데이터 타입/클래스의 객체에 공통적으로 적용 가능한 함수 (클래스 안에 있는 모든 함수는 메서드)

 

🦄메소드 3가지

ⓐ인스턴스 메서드(instance method)
ⓑ클래스 메서드(@classmethod),
ⓒ정적 메서드(@staticmethod)

 

 

 

5. 인스턴스 메서드(instance method) (중요도🌟🌟)

 : 인스턴스 변수를 사용하거나, 인스턴스 변수에 값을 설정하겠다는 의도가 담겨있음(클래스 내부에 정의되는 메소드의 기본)
인스턴스 변수 선언하는 방법 : self.name = name

인스턴스 메소드 호출 시, 첫번째 인자로 인스턴스 자기자신(self)이 자동으로 전달되도록 설계되어있음.
(이게 self.~ 넣는 이유임 self 자리에 인스턴스가 들어오는거)
self : 인스턴스 자기자신임 (self 쓰는 게 암묵적 규칙)

[인스턴스 메서드 호출방법]
- 해당 클래스 안에서는 self.메소드명
- 클래스 밖에서는 객체.메서드명

 

 

 

6. 매직메소드

: 매직메서드는 생성자, 인스턴스를 만들면 특정 상황에 자동으로 호출됨

__init__ :클래스의 인스턴스가 생성될 때, 자동으로 호출되는 함수
init : 초기화 준말인데(인스턴스 변수들의 초기값을 설정), 생성자 역할임. 
ex. Person() = Person.__init__(Person)

__del__ : 클래스의 인스턴스가 소멸될 때, 자동으로 호출되는 함수

 

 

 

7. 정적 메서드(static method) (중요도🌟🌟)

: 객체와 독립적이지만, 로직상 클래스 내에 포함되는 메서드. 함수 정의하고 위에 @staticmethod 붙이면 정적 메서드임을 나타냄.

정적 메서드는 메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수를 만들 때 사용. 즉, 인스턴스 상태를 변화시키지 않는 메서드를 만들 때 사용

(순수 함수란, 부수 효과가 없고 입력 값이 같으면 언제나 같은 출력값을 반환함.)

self로 호출 X, 정적 메서드 내부에서 클래스 변수(속성)에는 클래스명.클래스속성명으로 접근 가능

[정적 메서드 호출방법]
- 클래스명.정적메서드명 (주로 사용)
- 객체명.정적메서드명

 

 

 

8. 클래스메서드(class method) (중요도🌟🌟)

 

: self 대신 cls라고 씀. 함수 정의하고 위에 @classmethod 붙이면 이름 없어도 함수가 실행됨(데코레이텅 기능)

인스턴스 없이 호출이 가능하다는 점에서 정적 메서드와 비슷하지만 약간의 차이점이 있음.

[클래스 메서드 호출방법]
- 클래스명.클래스메서드명
- 객체명.클래스메서드명

 

 

🆚정적 메서드 VS 클래스 메서드
정적 메서드 클래스 메서드
인스턴스 변수를 호출할 수 없지만
인스턴스 메소드는 static 변수를 호출할 수 있음
클래스메서드는 인스턴스 변수에 접근할 수 없음
(클래스 단위로만 접근)
인스턴스 메소드를 호출할 수 없지만
인스턴스 메소드는 static 메소드를 호출할 수 있음
인스턴스 메소드를 호출할 수 있음
🔸인스턴스 메서드는 클래스 변수, 인스턴스 변수 둘다 사용이 가능


✴️ 그러면 언제 static을 붙이면 좋은가?
==> 인스턴스 변수를 사용하지 않는 경우에 static 붙인다.

정적 메서드: 인스턴스, 클래스 변수를 전혀 다루지 않는 메서드  
->> 사용하는 이유는, 클래스 안의 메서드랑 비슷하다보니 같이 묶어두는거.
일반 함수처럼 동작하지만, 클래스의 이름 공간에 귀속됨(내 생각: 개발자가 보기 편하고 유지보수하기 편하려고)

 


📁추가 내용

 

🗝️데코레이터

: 함수나 메서드에 적용되어, 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할

 


<데코레이터> (함수의 꽃)
"@"를 이용하여 데코레이터함. 함수를 꾸며서 새로운 기능을 부여함. 함수 또는 메서드 위에 위치함
기존 함수를 건드리지 않고, 함수에 기능을 추가할 수 있음.

ex. @property, @setter


📍함수도 인자로 넘길 수 있음.  💡인자 다 받고 싶을 때는 *args, **kargs

'파이썬 > 파이썬 심화' 카테고리의 다른 글

매직메소드 정리  (1) 2024.08.02
객체지향 프로그래밍  (0) 2024.07.30

 

📍 매직메소드 중 __str__ 메소드와 __repr__ 메소드의 공통점과 차이점

 

공통점

객체를 문자열로 반환함 : 객체가 어떤 타입을 가졌던 간에 그것을 문자열로 반환 

 


차이점

__str__ 메소드

: interface로서의 역할을 수행하기 위해 존재
서로 다른 타입을 가진 데이터끼리 상호작용할 때 문자열로 반환시킴으로서 상호간의 호환이 가능하도록 함
즉, 사용자에 좀 더 초점이 맞춰져있음
쉽게 말해 print() 함수를 떠올리면 된다.
사실 print() 함수는 단순히 출력만 하는 기능이 아닌, 터미널 창에 문자로 보이게 출력해주는 기능이다.
즉, a = 1 을 출력하면 a의 실제 타입은 int지만, 터미널에 보여지는 1은 사실 문자임
사용자가 보기 편하도록 문자로 모두 변환해서 출력하는 것임.
(bc) print는 내부적으로 str 메소드를 호출함.

__repr__ 메소드

: 객체를 문자열로 표현하기 위해 존재하는 메소드지만 개발자에 초점이 맞춰져있음.
__repr__의 반환 값은 eval 함수에 사용 가능하며 이를 활용하여 새로운 객체를 만들어 내는 것도 가능
(단, __str__ 메소드의 반환 값은 eval 함수에 사용할 수 없음)

 

 


🫧 오늘 배운 매직메소드 내용 정리

 

__dict__

: 객체의 속성을 딕셔너리로 반환함. 딕셔너리의 key 는 객체의 어트리뷰트이고 value 는 어트리뷰트의 값이다.


__dir__ 

모든 메서드와 어트리뷰트를 보여줌


__init__ 

: 생성자를 호출하여 클래스의 새 인스턴스를 생성할 때 실행됨 (클래스 만들 때, 가장 상단에 작성하는 듯함, 생성할 인스턴스의 속성을 나타내니까 이 클래스가 어떤 용도인지 바로 알 수 있을 것 같아서?)


__doc__ 

: 클래스나 함수 내부의 apostrophe(’)에 담긴 내용들을 나타내줌. (만약 파이썬에 이미 정의되어 있는 메소드를 doc로 호출할 경우, 파이썬에서 docstring으로 작성한 내용들이 나타남. 내 생각엔 이게 함수 사용설명서 같은 느낌임.)

 


📁추가 내용

id(_) 함수

매직메소드는 아니지만 오늘 수업에서 id() 함수를 사용하였는데, 이것은 객체의 ID를 가져오는 함수임
즉, ID를 통해 어떤 객체를 가리키는지 확인할 수 있음.
또, 클래스에도 id가 존재하는데 추후 부모클래스/자식클래스를 공부할 때, 클래스 종류가 많아지면, 생김새로는 구분하기 어려울 수 있기 때문에, 이떄 id()함수를 사용한다고  보스가 말씀하심.
id는 파이썬이 객체를 구별하기 위해서 부여하는 일련번호일 뿐, 숫자로서 의미는 없음

 

'파이썬 > 파이썬 심화' 카테고리의 다른 글

인스턴스, 클래스, 정적메서드  (0) 2024.08.05
객체지향 프로그래밍  (0) 2024.07.30

🔸객체(object)란?

객체 객체 지향 프로그래밍의 가장 기본적인 단위(혹은 시작점)

모든 현상과 발생하는 모든 사건은 이러한 객체들 간의 상호작용을 통해 발생함

모든 실재하는 대상


🔸객체 지향 프로그래밍

객체들의 모임으로 파악하고자 하는 것

객체를 추상화시켜 속성기능으로 분류한 후, 이것을 다시 변수, 함수로 정의함
이전에는 명령어의 목록으로 봤었는데 그걸 바꾸고자 나옴 [절차지향 -> 객체 지향 프로그래밍, 함수형 프로그래밍]


🔸절차 지향 프로그래밍

모든 절차가 다 기술돼있음(ex.Global data) 
- 장점: 컴퓨터가 고민 안하고 순서가 정해져있어서 실행이 빠름, 프로그램 전체가 유기적으로 연결됨
- BUT, 절차지향의 구조가 점차 복잡해짐. 소프트웨어 위기(소프트웨어가 하드웨어 발전 속도를 못 따라감)
그래서 데이터를 중심으로 절차를 도입해서, 현실의 사물을 나타내고 .... 그리하여 oop를 만듦.

🔸객체지향 프로그래밍이 필요한 이유🙆
프로그래밍 왜 배워요? 현실 세계의 문제를 풀도록 프로그램을 설계해서 반영하려고.

🔸객체지향의 장점 👍

1.객체는 잘 만들어놓으면 재사용 가능(class) (반복적인 코드를 최소화하고 코드를 최대한 간결하게 표현할 수 있음)
2. 객체 그 자체로 데이터와 행동이 정의됨(개발자가 내부 구조를 몰라도 바로 사용 가능 -> 생산성이 올라감), 대규모 소프트웨어 가능함
개발 용이성, 유지 보수 편의성, 코드의 신뢰성 -> 생산성이 증가함(keypoint) -> 즉 돈 많이 벌게 됨


🔸객체지향의 단점
1. 클래스 설계하는 게 매우 중요함, 클래스가 잘못 설계되면 다른 부분에도 영향을 끼침 (많은 노력과 시간이 필요)
2. 실행 속도가 상대적으로 느림(컴퓨터가 생각을 해야 돼서)

 


🔸 클래스

클래스는 객체지향 프로그래밍의 핵심
객체는 클래스에서 정의한 것을 토대로 메모리(실제공간)에 할당된 것이고 클래스는 설계도라고 보면 됨. 원하는 구조의 객체 틀을 짜놓고 비슷한 모양의 객체를 공장처럼 찍어낼 수 있음.

클래스 사용법

 


🌟객체: 속성(data) 또는 행동(method)으로 구성된 모든 것🌟
ex. 이찬혁
클래스(설계도):가수, 객체(실제 사례):이찬혁
클래스로 만든 객체를 인스턴스라고"도" 함

 

🌟 중요 🌟
🌳사용자 정의 타입이 클래스임

(자료형을 메모리에 효율적으로 저장하는데, 내가 원하는 타입을 만들기 위해 하는 것을 클래스라고 한다....?)

🌳파이썬은 모든 것이 객체이다. == 파이썬의 모든 것이 행동과 속성이 존재
클래스를 만드는 건 나만의 데이터 타입을 만드는 것


💡[3,2,1].sort() -> 객체.행동()

 

 

✏️기본 문법

- 🐍snake_case (소문자/언더바) (파이썬에서 주로 snake case 사용)

- 🐫camelCase (소문자로 시작하고 이어지는 단어들의 시작은 대문자로 작성. 즉, 의미/단위가 달라질 때  대문자)

- 🐪PascalCase (단어의 첫 시작은 항상 대문자)

 

💡 Tip) 캐멀케이스>낙타는 "소두"라서 앞에는 소문자이고 뒤에는 다 대문자) (조금 현타..가.. 오지만 암기는 잘될 듯...)

 

🥕 인스턴스
클래스를 통해 생성된 객체

🥕 메서드
함수. 클래스는 수많은 종류의 메서드를 가질 수 있음.


🥕클래스 정의
class MyClass:   [규칙: 이때는 파스칼 케이스로!]


🥕인스턴스 생성
my_instancd = MyClass()


🥕메서드 호출
my_instance.my_method() (이제부터 인스턴스한테 행동을 호출할 수 있음)


🥕속성 접근
my_instance.my_attribute


💡isinstance(A,B): A가 B타입(클래스 name)을 물어볼 때 사용

 


🐱참고🐱


a == b 랑 a is b 랑 다름. "=="은 값이 같으면 트루, "is"는 주소가 같으면 트루
is 는 주로 is None 쓸 때 사용함 (None은 값이바뀌지 않기 때문에 주소가 고정임)

클래스 변수와 인스턴스 변수..... 

 


namespace 
LEGB (뭔데 이거..... 나 왜 모름...)

'파이썬 > 파이썬 심화' 카테고리의 다른 글

인스턴스, 클래스, 정적메서드  (0) 2024.08.05
매직메소드 정리  (1) 2024.08.02

+ Recent posts