상세 컨텐츠

본문 제목

누구나 파이썬 -8 [ Class 2 , except ]

개발생활/Python

by 한국인맛집 2020. 2. 23. 07:52

본문

반응형

이전 자료 보기

 

[개발생활/Python] - 누구나 파이썬 -7 (Class 기본 -1 )

 

누구나 파이썬 -7 (Class 기본 -1 )

이전 자료 보기 [개발생활/Python] - 누구나 파이썬 -6 (Module , file I/O , 코딩스타일) 누구나 파이썬 -6 (Module , file I/O , 코딩스타일) 이전 자료 보기 [Developer /Python] - 누구나 파이썬 -5(함수 -2 ,..

devkoboso.com

 

 

 

 


 

목차


1. 객체지향 프로그래밍 언어 특징

 

2. 상속 (Inheritance) - 상속의 개념

 

3. 예외처리 - try-except  , 예외 유도





 

1. 객체지향 프로그래밍 언어의 특징



 

객체지향 프로그래밍 언어의 특징은 다음과 같습니다. 

 

0. 추상화

1. 캡슐화

2. 은닉화

3. 상속성

4. 다형성



0. 추상화 : 프로그램 구성중에서 필요한 속성(변수), 메서드만 만들어 놓는것을 의미합니다.

 

- 클래스를 선언하는 행위는 모두 추상화의 특징을 가지고 있습니다. 

 

예를 들어 스크립트를 아래와같이 클래스를작성하였습니다.

 

 

class Student:
    math
    eng
    def func(self):
        print('math {0} , english {1}'.format(self.math,self.enf))



 

 

그리고 파이썬스크립트를 실행하면 어떠한 동작을 하나요?

 

‘아무런 동작도 하지않습니다’ 선언만 해놓았고 객체화 하지 않았기 때문이죠

클래스를 객체화 하지 않는다면 그건 추상적인 의미 입니다.







1. 캡슐화 : 프로그램을 구성하는 변수, 속성, 함수를 하나로 묶는것을 의미합니다.

 

- 클래스는 덩어리 라고 했습니다. 그 추상적인 덩어리가 캡슐화의 성질을 가지고 있습니다. 

 


하나의 클래스 안에 변수, 함수 많은 속성들을 담고 있는것이 캡슐화 입니다.


 

class Student:
  
    def func(self):
        print('math {0} , english {1}'.format(self.math,self.enf))

    def __init__(self, a, b):
        self.math = a
        self.eng = b
    

def main():
    s1 = Student(80,90)
    s2 = Student(30,20)
    s3 = Student(88,10)
    
    list = [s1,s2,s3]
  
    for var in list:
        var.func()


if __name__ == '__main__':
    main()



2. 은닉화 : 속성, 함수 무분별한 접근을 제한하는것을 의미합니다.

 

- public, privat , protected 와 같은 클래스 접근 제한자를 말합니다.




3. 상속성 : 부모클래스의 속성, 함수가  자식클래스로 상속받아 사용할수 있는 특징을 말합니다.

 

-객체지향 프로그래밍 언어에서 발견할수 있는 가장큰 특징은 상속 입니다. 상속을 통해 자식 클래스에서 부모클래스의 속성을 사용하고 함수를 재정의, 재활용 가능하기때문에 프로그램 생명주기 관리에 도움을 주는 기능입니다.



4. 다형성 :  상속을 받은 자식클래스의 속성이 다른 특징을 뜻합니다.

 

- 상속성에서 나온 이야기지만 ,부모클래스에서 가져온 속성(함수) 를 자식 클래스에서 다르게 정의하여 사용하고, 함수를 재활용하는 강력한 기능입니다.

 

 

 

2. 상속 (Inheritance)

 

상속은 계층 관계를 가지고 있습니다. 

 

상속없이 베이스로 클래스를 사용할수 있지만 

 

상황에 따라 부모클래스를 베이스로 두고 부모를 상속받은 자식 클래스를 여러개만들수 있습니다.

 

사람은 모두 동물이다 (O)

동물은 모두 사람이다 (X)

 

부모클래스가 전부 자식클래스의 속성을 가질수 없지만 자식클래스는 부모클래스의 속성을 가질수 있습니다.

 

상속을 사용하는 방법은 아래와 같습니다.

 


예제 문제를 이용하여 상속을 해보도록 하겠습니다.


# (부모클래스)
class Parent:
  def method():

    #Some thing..   

# 자식클래스의 구현

class Child(Parent):
    def method()

    #some thing...







 

동물은 4족보행을 주로 합니다.

 

그러나 사람은 2족보행을 주로 합니다

 

사람은 동물을 상속받아 2족 보행 으로 수정해야합니다. 사람은 특별한 경우가 아니고선 2족 보행을 일반적으로 하기 때문이죠.

 

그래서 다음과 같이 수정하였습니다.



import sys

class Animal:
    def walking(self):
        print('Four-legged walking')


class Person(Animal):
    def walking(self):
        print('two-legged walking')


def main():
    male = Person()
    male.walking()

    ani = Animal()
    ani.walking()


if __name__ == '__main__':
    main()

 





2-1 다중상속

 

파이썬도 다중상속을 지원합니다. 하지만 다중상속부분은 넘어가도록 하겠습니다. 다중상속은 추후 필요에따라 추가적으로 설명하도록 하겠습니다.







3. 예외처리(Exception)

 

예외 처리는 프로그램에 있어 중요한 내용입니다.

 

갑작스러운 컴퓨터 쇼트, 네트워크 에러, 사용자의 의도하지않은 동작으로 인해 프로그램이 정상동작 하지않을수 있습니다.

 

그렇다면 예외 처리의 종류는 어떤것이 있을까요?



예외 종류

설명

Syntax Error

문법오류

ZeroDivisionError

0으로 나누려고 했을때

NameError

이름이 정의되어 있지않을때

Type Error

타입이 모호할때



일반적으로 위에 와 같은 에러를 쉽게 발생하며, 파이썬을 배워나가면서 자주 발생하고 보는 에러입니다.




 

예외처리를 하는 기본 틀은 아래와 같습니다.

try:
    #something..
    # 이곳은 꼭 행동합니다.

except <조건>:
    #해당 조건에 맞는 예외 처리를 합니다.

 

 


아래 예제를 이용해 예외처리를 하고 안하고의 차이를 확인해봅시다.




* 예외 처리를 하지 않은 코드

import sys

while True:
    x = int(raw_input('input your number   :'))
    if x is 0:
        break
    else :
        print x


예외 처리를 한 코드



 

 

예외처리로 인해 프로그램의 의도치않은 동작을 줄일수 있습니다.

import sys

while True:
    try:
        x = int(raw_input('input your number   : '))
        if x is 0:
            break
        else :
            print x        

      
    except ValueError:
        print('oops Value Error')




다음 예제도 작성하여 실행해봅시다.

 

아래는 파일입출력 관련 예외 처리하는 방법입니다.

 

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except IOError as e:
    print "I/O error({0}): {1}".format(e.errno, e.strerror)
except ValueError:
    print "Could not convert data to an integer."
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise


예외처리는 아래와 같이 튜플 형태로도 이용가능합니다.


 

try:
    #something

except (RuntimeError, TypeError, NameError):
...     pass




예외 발생시키기 (Raise)

 

파이썬에서 프로그래머가 강제적으로 예외를 발생시킬수 있습니다.

 

쉽게말하면 프로그램에 예외 처리가 발생할수 있도록 프로그래머가 유도 할수 있습니다.

 

예외를 발생시키기 위해선 raise 키워드를 사용해야 합니다.

 

사용법은 아래와 같습니다.

 

>>> raise NameError('hihi')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: hihi
>>>



반응형

관련글 더보기