본문 바로가기
Python/객체지향

[ 객체 지향 프로그래밍 ] 3일차 ( 객체 지향 언어 )

by 2CHAE._.EUN 2022. 1. 21.

[ 객체 지향 언어 ]

 

파이썬은 모든 것이 객체인 순수 객체 지향 언어이다.

 

1 : int 클래스로 만든 1을 나타내는 인스턴스

"" : str 클래스로 만든 빈 문자열을 나타내는 인스턴스

 

 

가변 VS 불변 타입

 

가변 타입 객체 : 한번 생성한 인스턴스의 속성 변경 가능 ex) 리스트 클래스

불변 타입 객체 : 한번 생성한 인스턴스의 속성 변경 불가 ex) 튜플 클래스

 

mutable_object = [1,2,3]
immutable_object = (1,2,3)

mutable_object[0] = 4
print(mutable_object) # [4,2,3]

immutable_object[0] = 4
print(immutable_object) # 에러

 

불변 타입이라 해도 변수가 가리키는 객체 자체는 바꿀 수 있다. ( 이미 생성된 객체의 속성을 바꾸는 것은 불가능 )

 

immutable_object = (1,2,3)

# 새로운 인스턴스를 지정해주는 것은 가능하다.
immutable_object = (4,5,6)
immutable_object = (7,8,9,10)

print(immutable_object)

 

같은 변수로 속성이 다른 튜플을 사용하고 싶은 경우, 기존 튜플의 속성을 바꾸는 것이 아니라

새로운 튜플 인스턴스를 생성하고 기존 튜플이 그 새로 생성된 인스턴스를 가리키도록 만들면 된다.

 

반면에 리스트는 append 등의 함수를 사용해서 한번 생성한 객체의 속성을 바꿀 수 있다.

 

가변 타입 클래스 불변 타입 클래스
list bool
dict int
직접 작성하는 클래스 float
  str
  tuple

 

직접 작성하는 클래스는 가변 타입이기 때문에 직접 만든 클래스로 인스턴스를 생성한다면 후에도 계속 그 인스턴스의

속성을 수정할 수 있음. 기존의 인스턴스를 변경하고 싶을 경우 새 인스턴스를 굳이 생성할 필요없이 원래 인스턴스의

속성을 변경해주면 된다.

 

 

절차 지향 언어와 객체 지향 언어의 차이

 

절차 지향 언어 : 프로그램을 명령어 들의 순서대로 실행하는 프로그래밍 언어이다. 프로그램에 필요한 데이터와

                       함수를 묶어서 관리하지 못해 프로그램 안에서 서로 관련된 동작들만 묶어서 관리한다.

 

객체 지향 언어 : 프로그램을 객체 간의 소통으로 생각한다. 객체가 프로그램의 기본 단위이고, 객체 안에는 데이터의

                       속성과 행동이 들어있다. 즉 클래스를 이용해 서로 관련있는 데이터와 함수를 객체로 묶어서

                       사용 할 수 있다.

 

 

파이썬의 유용한 함수들

 

1. ternary expression : Boolean의 값에 따라 다른 값을 리턴

 

staff = True

staff_string = "abc" if staff else "abcdefg"

print(staff_string) #abc

# staff가 True일 때는 abc가 되고 False일 때는 abcdefg가 리턴된다.

 

2. list comprehension : 새로운 리스트를 만드는 방법 중 하나

 

my_list = [1,2,3,4,5,6]

new_list = [ index * 2 for index in my_list ]

print(new_list)

 

3. zfill 메소드 : 문자열을 최소 몇자리 이상을 가진 문자열로 변환시켜준다. 부족한 부분에는 왼쪽에 문자열 '0'을

                    채워줌. zfill의 인자보다 이미 더 긴 문자열일 경우 그 문자열을 그냥 그대로 출력한다.

 

print("abc".zfill(8)) #00000abc

 

 

* rjust와 ljust 함수

 

rjust 함수는 문자열을 오른쪽에 정렬하고 문자열의 총 길이가 인자로 받는 값이 되도록 왼쪽부터 채워준다.

ljust 함수는 문자열을 왼쪽에 정렬하고 문자열의 총 길이가 인자로 받은 값이 되도록 오른쪽을 채워준다.

 

right = "abcd".rjust(10,"e")

left = "efgh".ljust(10,"d")

print(right) #eeeeeeabcd
print(left) #efghdddddd

 

f-string으로 똑같이 표현할 수 있음

 

value1 = "abcd"
print(f"{value1:e>10}")  #eeeeeeabcd

value2 = "efgh"
print(f"{value2:d<10}") #efghdddddd

 

 

모듈 ( Module )

 

모듈 : 변수, 함수, 클래스 등을 모아놓은 파일

 

from [ 모듈의 이름 ] import [ 불러올 변수 / 함수 / 클래스 이름 ]

# 모듈의 이름에서는 확장자명인 ".py"를 빼줘야함
# import 부분에 "*"를 써주면 모듈 안에 있는 모든 변수와 함수, 클래스를 불러올 수 있음

 

1. randint 함수 : 두 정수 사이에서 랜덤한 정수 하나를 리턴하는 함수

 

from random import randint

number = randint(1,100)
print(number)

 

2. uniform 함수 : 두 수 사이에서 랜덤한 소수 하나를 리턴하는 함수

 

from random import uniform

number = uniform(1,100)
print(number)