[사전 지식]

Jo sumin·2022년 4월 5일
0

객체지향

목록 보기
2/2

📚순수객체지향 언어

파이썬은 순수객체 지향언어다

순수객체지향언어란 파이썬에 있는 모든 것이 객체라는 의미다.

우리가 일반적으로 사용했던 숫자 정수형, 실수형, 문자열, 리스트, 튜플, 딕셔너리, 집합 등이 모두 객체라는 것이다.
뿐만 아니라 순수 객체 지향 언어는
사전 정의 된 모든 데이터 유형, 모든 사용자 정의 데이터 유형은 객체이다.

  • 정보 은닉/은폐
  • 캡슐화
  • 상속
  • 다형성
  • 추상화
    모두 해당될 경우에 Pure Object Oriented Language 라고 한다.

⭐ 객체로 받아들여지고 있는지 확인?! type() 함수로!

class User:
    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password

    def say_hello(self):
        print(f"안녕하세요! 저는 {self.name}입니다.")

user1 = User("강영훈", "younghoon@codeit.kr", "123456")

print(type(user1))

<class 'main.User'>

user1이 class User안에 현재 실행되고 있는 특수 메소드 main에서 생긴 객체라는 뜻이다.

print(type(2))
print(type("string"))
print(type([]))
print(type({}))
print(type(()))
#결과값
<class 'int'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'tuple'>
모두 클래스 이름이다.

📚 Mutable VS Immutable

상황에 따라 달라지는 타입이 있다.

📌Mutable 가변 타입 객체

👉 한 번 생성한 인스턴스의 속성 변경이 가능

👉 list, dictionary, 직접 작성하는 클래스

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

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

📌Immutable 불변 타입 객체

👉 한 번 생성한 인스턴스의 속성 변경 불가

👉 int, bool, float, str, tuple

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

immutable_object[0] = 4
print(immutable_object)

#결과 TypeError: 'tuple' object does not support item assignment

👉변수 자체가 가리키는 객체 자체를 변경할 수는 있다.

tuple_x = (1, 4)
tuple_x = (3, 4, 6)

print(tuple_x)

이런 식으로 객체를 바꿔는게 아니라 새로 생성해주면 결과값 (3,4,6)으로 잘 나온다.


📚 절차지향 VS 객체지향

📌절차 지향 프로그래밍 예시

서로 관련된 동작들로만 이뤄져있다. 위에서 아래로 쭉 동작하면 된다.

# 절차 지향 프로그래밍
# 반복적으로 사용하는 코드를 함수로 정의한다
def print_person_info(person_name, person_age, person_gender):
    # 사람의 이름, 나이, 성별을 파라미터로 받으면 받은 정보를 이해할 수 있는 문자열로 출력해주는 함수
    print("사람 한 명을 소개합니다")
    print("{}님은 {}살이고 {}입니다".format(person_name, person_age, person_gender))
    
def is_underage(person_age):
    # 사람의 나이를 파라미터로 받아서 미성년자인지를 리턴해주는 함수
    return person_age < 20
    
# 영훈이의 정보
young_name = "영훈"
young_age = 10
young_gender = "남자"
    
# 윤수의 정보
yoonsoo_name = "윤수"
yoonsoo_age = 20
yoonsoo_gender = "남자"
    
# 영훈/윤수 정보 출력
print_person_info(young_name, young_age, young_gender)
print_person_info(yoonsoo_name, yoonsoo_age, yoonsoo_gender)
    
# 영훈/윤수가 미성년자인지 출력
print(is_underage(young_age))
print(is_underage(yoonsoo_age))

📌 객체 지향 프로그래밍 예시

객체지향은 동작을 묶을 뿐만 아니라 연관된 "데이터도 객체로 묶어서" 하나의 "클래스"로 나타낸다.

# 객체 지향 프로그래밍
# 속성과 행동을 갖는 객체들이 행동을 하는 방식으로 작성한다
class Person:
    # 사람을 나타내는 클래스
    def __init__(self, name, age, gender):
        # 사람은 이름, 나이, 성별을 속성으로 갖는다
        self.name = name
        self.age = age
        self.gender = gender
    
    def print_info(self):
        # 자신의 정보를 출력하는 메소드
        print("사람 한 명을 소개합니다")
        print("{}님은 {}살이고 {}입니다".format(self.name, self.age, self.gender))
    
    def is_underage(self):
        # 사람의 나이를 파라미터로 받아서 미성년자인지를 리턴해주는 메소드
        return self.age < 20
    
# 영훈/윤수을 나타내는 객체 생성
young = Person("영훈", 10, "남자")
yoonsoo = Person("윤수", 20, "남자")
    
# 영훈/윤수 정보 출력
young.print_info()
yoonsoo.print_info()
    
# 영훈/윤수가 미성년자인지 출력
print(young.is_underage())
print(yoonsoo.is_underage())

👉 차이점

절차지향

  • 프로그램 만들때 데이터를 합칠 수 없다.
  • 프로그램을 명령어들을 순서대로 실행하는 것으로 본다.

객체지향

  • 프로그램 만들 때 데이터와 함수를 합칠 수 있다.
  • 프로그램을 객체들이 순서대로 소통하는 과정으로 본다.

📚 유용한 함수들

📌 max, min , sum 함수

최대와 최소 값을 반환해준다.

print(max(2, 5))             # => 5
print(max(2, 7, 5))          # => 7
print(min(2, 5))             # => 2
print(min(2, 7, 5, 11, 6))   # => 2
int_list = [1, 2, 3, 4, 5]
int_tuple = (4, 3, 6, 1, 2)
int_dict = {1: "one", 2: "two", 3: "three"}
    
print(sum(int_list))         # => 15
print(sum(int_tuple))        # => 16
print(sum(int_dict))         # => 6

📌 ternary expression : 불린(Boolean) 값에 따라 다른 값을 리턴하는 구문

condition = True
    
if condition:
    condition_string = "nice"
else:
    condition_string = "not nice"
    
print(condition_string)      # => nice
condition = True
    
condition_string = "nice" if condition else "not nice"
    
print(condition_string)      # => nice

📌 List Comprehension

int_list = [1, 2, 3, 4, 5, 6]
squares = []
    
for x in int_list:
    squares.append(x**2)
    
print(squares)               # [1, 4, 9, 16, 25, 36]

새로운 리스트를 만드는 간편한 방법

int_list = [1, 2, 3, 4, 5, 6]
squares = [x**2 for x in int_list]
    
print(squares)               # [1, 4, 9, 16, 25, 36]

squares = [x**2 for x in int_list]

👉 이렇게 리스트 [] 안에 원하는 값 리턴하는 식 (x**2) 뒤에 for문을 써준다. (for x in int_list)

📌 zfill method

zfill 메소드는 문자열을 자릿수 설정대로 만들어준다.

만약 모자라다면 왼쪽부터 0을 채워준다.

"1".zfill(2)을 하면 "01"을 리턴
문자열을 통일감있게 예쁘게 하고 싶을 때 사용

print("1".zfill(6))
print("333".zfill(2))
print("a".zfill(8))
print("ab".zfill(8))
print("abc".zfill(8))
#결과값
000001
333
0000000a
000000ab
00000abc

📚 모듈(Module)

모듈은 함수, 클래스, 변수를 넣은 파일로 다른 파일에서 import해 가져다 쓸 수 있다.

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

모듈에 정의된 모든 것들을 사용하려면, *을 쓴다.

from 모듈명 import *

📌Randit 함수, uniform 함수

Randit과 uniform 함수는 파이썬 기본 내장 모듈 random의 함수다.

Randit() : 정한 범위 수 안에 랜덤으로 한 가지 수 출력

다음 코드 실행 시 1부터 20 사이의 정수 중 랜덤으로 한 가지 수가 출력

from random import randint
# 1 <= N <= 20를 만족하는 랜덤한 정수(난수) N을 리턴한다.
x = randint(1, 20)
print(x)

uniform(): 두 수 사이의 랜덤한 소수(난수)를 리턴하는 함수

다음을 실행하면 0과 1사이의 소수 중 랜덤으로 한 가지 수가 출력

from random import uniform
# 0 <= N <= 1을 만족하는 랜덤한 소수(난수) N을 리턴한다.
x = uniform(0, 1)
print(x)
profile
TIL_기술블로그

0개의 댓글