printf("ho_tari\n");

3일차 본문

2025.04.16

 

복합 자료형

리스트

- 여러 개의 문자, 숫자를 하나의 그룹으로 묶어서 저장해 놓은 개념

- 인덱싱, 슬라이싱 이용 가능

- +, *, in, not in, len() 사용할 수 있음

- 순서가 있고 인덱스를 이용하여 데이터에 접근할 수 있음

- 리스트는 변할 수 있음

 

리스트 메소드

- 리스트에서 사용할 수 있는 메소드 : 리스트.메소드 형태로 사용해야 함

 

튜플

- 리스트처럼 여러 데이터를 저장할 수 있는 자료형

- 대괄호 [] 대신에 소괄호()를 사용

- 인덱싱, 슬라이싱 이용 가능

- +, *, in, not in, len() 사용할 수 있음

- 튜플은 여러 변수에 값을 동시에 할당할 수 있도록 함

- 튜플은 변하지 않으므로 프로그램 수행 동안 변경하지 않아야 하는 데이터는 튜플로 저장하는 것이 좋음 (리스트와 차이점)

 

튜플 사용 이유

- 객체를 굳이 복사하지 않고 기존의 객체에 변수만 할당하는 식으로 효율을 높힘

- 파이썬에서 메모리를 절약하고 성능을 높이기 위한 일종의 전략

- 튜플은 불변 객체이므로 값을 바꿀 수 없으므로 원본이나 사본의 값을 바꾸었을 때, 반대편의 값도 함께 바뀌는 것에 대한 걱정을 할 필요가 없음

 

튜플 메소드

- 튜플에서 사용할 수 있는 메소드 : 튜플.메소드 형태로 사용해야함

 

리스트 vs 튜플

공통점

- 객체를 저장하는 컨테이너형 변수

- 데이터 타입과 상관없이 요소를 갖을 수 있음

- 인덱스를 통해 특정 요소에 접근할 수 있음

 

차이점

- 리스트는 변경가능, 튜플은 변경불가능

- 리스트는 단일 종류의 요소를 갖고 있고 요소가 몇 개나 있는지 정확하지 않을 때 주로 사용

- 튜플은 들어있는 요소의 수를 사전에 정확히 알고 있는 경우에 사용

 

딕셔너리

- 여러 데이터를 저장하는데 중괄호{}로 묶어 키(key)와 값(value) 쌍으로 구성됨

  딕셔너리는집합의일종임(순서개념이없음)

- 형식 : number = {1:30, 2: 25, 3: 28}

- +, * 를 사용할 수 없고 인덱스 기호([])는 사용함 ( 예: 값 입력 → my_dict["key"] = "value“ )

- 리스트나 튜플처럼 순차적으로 해당요소를 구하지 않고 key를 통해 value를 얻음

- in, not in, len()은 사용할 수 있다

- 딕셔너리키

    - 정수, 실수, bool, 복소수, 문자열, 튜플은 ‘키’가 될 수 있음

    - mutable 자료형은 ‘키’가 될 수 없음 (리스트, 집합, 사전), 중복되는 key 는 무시됨

- 여러 정보를 하나의 변수로 표현할 때 유용함 (학생정보: 학번: 10001, 이름: ‘홍길도’, 학과:'컴퓨터학과')

- 딕셔너리 값 : 모든 자료형이 딕셔너리 ‘값’이 될 수 있음

 

딕셔너리 메소드

- 딕셔너리에서 사용할 수 있는 메소드 : 딕트.메소드 형태로 사용해야함

 

집합

- 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형

- 키만 모아놓은 딕셔너리의 특수한 형태임. 딕셔너리의 키는 중복되면 안되므로 집합에 들어 있는 값도 유일함

- 집합을 생성할 때 딕셔너리처럼 중괄호{ }를 사용하지만 : 는 없음

- 집합은 중복된 데이터를 가질 수 없고 순서가 없는 데이터구조임

    => 인덱스 기호([ ]), +, * 를 사용할 수 없다.

- 집합 자료형은 set 키워드를 사용해 만들 수 있음

- in, not in, len()은 사용할 수 있다.

- 변할 수 있는 자료형임 (파이썬에서는 제공하는 frozenset 은 변경불가능함)

- 집합은 자주 사용되지는 않지만 리스트에서 중복된 값을 제거할 때 유용하게 사용함

 

집합 메소드

- 집합에서 사용할 수 있는 메소드 : 집합.메소드 형태로 사용해야함

 

집합 연산

 

실습_20_파이썬자료형-복합자료형1(리스트).ipynb
0.02MB

 

실습_21_파이썬자료형-복합자료형2(튜플).ipynb
0.01MB

 

실습_22_파이썬자료형-복합자료형3(딕셔너리).ipynb
0.01MB

 

실습_23_파이썬자료형-복합자료형4(집합).ipynb
0.01MB

 

복합 자료형 심화

- 컴프리헨션(함축) : 순차적인 리스트를 한 줄로 만드는 방법

  리스트 = [ 수식 for 항목 in range() if 조건식 ]

  → 코딩 양을 줄일 수 있음

- zip() : 동시에 여러 리스트 접근하기

  리스트 복사는 기본적으로 메모리는 공유하는데 기존 데이터와 별도의 메모리를 사용하려면

  newList = oldList[:] or newList = oldList.copy()

 

실습_24_복합자료형 심화.ipynb
0.01MB

 

파이썬 구성요소

 

함수 정의

- 함수는 입력과 출력을 갖는 black box와 같은 것

- 함수는 def 키워드를 이용해서 명령블록에 이름을 붙인 형태

- 정의는 어떤 이름을 가진 코드가 구체적으로 어떻게 동작하는지 기술하는 것을 말함

- 파이썬에서는 함수나 메소드를 정의할 때 def 키워드를 사용하여 정의

- 형식

 

함수 사용 이유

- "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 "어떤 입력 값을 주었을 때 어떤 결과값을 돌려준다"라는 식의 함수로 작성하여 작업을 쉽게 하기 위함

- 프로그램 흐름을 일목요연하게 볼 수 있어 프로그램 흐름도 잘 파악할 수 있고 오류가 어디에서 나는지도 바로 알아차릴 수 있음

- 재사용성이 높음

 

함수 종류

내장 함수

- 파이썬 언어에서 미리 만들어서 제공하는 함수들

- dir(__builtins__)라고 입력하면 파이썬에서 제공하는 내장 함수 목록을 볼 수 있음

- 내장 함수에 어떤 것들이 있는지 학습하고 적절히 사용할 줄 아는 것이 중요함

 

사용자 정의 함수

- 사용자가 직접 만드는 함수

- def 키워드를 이용해서 코드블록에 이름을 붙인 형태로 정의하여 사용함

 

사용자 정의 함수 정의  및 호출, 반환하기

 

함수 호출 시 인수와 반환값

- 함수 호출 시 인수가 없는 경우(입력이 없으면) 빈 괄호로 둠

- 함수에 출력이 없을 경우 return을 사용하지 않아도 됨 (return 구문이 없는 경우)

- 반환 값이 여러 번 나오는 경우 가장 먼저 return을 만나는 순간 함수는 값을 반환하고 종료함

- 반환 값이 여러 번 나오는 경우 함수에 반환값이 2개 이상인 경우 튜플로 묶어서 반환함

 

함수의 메인 작성 및 위치

- 함수는 호출 전에 정의되어 있어야 함

- 함수의 메인 : 메인은 프로그램의 시작점을 의미

 

실습_25_함수1.ipynb
0.01MB

 

전역 변수와 지역 변수

- 전역 변수 : 프로그램 전체에서 사용 가능

- 지역 변수 : 함수 내에서만 사용 가능

- 변수를 찾을 때 지역 변수 → 전역 변수 순서로 찾음

 

GLOBAL 선언

- 함수에서 만든 지역 변수를 전역 변수로 사용하고자 한다면 global 선언이 필요함

 

함수의 인수

- 함수를 호출할 때 인수를 넘겨주지 않아도 인수가 자신의 기본값을 취하도록 기본값을 지정할 수 있음

- 단 기본값이 있는 인수(기본매개변수)가 먼저 올 수 없음

 

함수의 가변 인수

- 정해지지 않은 수의 인수를 함수에 전당하기. * 형식으로 기술

- 함수를 정의할 때 인수 목록에 반드시 넘겨야 하는 고정 인수를 우선 나열하고 나머지를 마지막에 튜플 형식으로 한꺼번에 받음

- 정의되지 않은 키워드 인수 처리기. ** 형식으로 기술

- 전달받는 형식은 딕셔너리임 (즉, 키는 키워드(변수명)가 되고 값은 키워드 인수로 전달되는 값이 됨)

 

람다함수

- 간단한 기능을 일반적인 함수와 같이 정의해두고 쓰는 것이 아니고 필요한 곳에서 즉시 사용하고 버리는 함수임.

  따라서 이름을 작성할 필요가 없이 사용 가능함

- 람다함수는 return 문을 사용하지 않고 반환값을 만드는 표현식이 있음

- 람다함수의 몸체는 문이 아닌 하나의 식이다 → 한 줄로 작성

- 람다함수는 함수를 함수 인자로 넘길 때 유용함

- 람다함수의 장점은 코드의 간결함으로 인한 메모리의 절약

 

- map 내장함수

- 사용자 정의한 임의의 함수에 각 값들을 하나씩 적용함

 

- filter 내장 함수

- filter (함수명, 함수에 대한 인수집합)

  함수명 : 참, 거짓 반환하는 함수

  인수집합 : 시퀀스 자료형 (리스트, 튜플, 문자열)

 

실습_26_함수2.ipynb
0.01MB

 

객체지향 프로그래밍

- 객체지향 프로그램 : "객체" 개념을 기반으로 한 프로그램의 한 패러다임으로 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 아는 것임

- 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용

- 구성 : 속성(필드, 데이터)과 기능(프로시저, 메소드)으로 구성

 

객체지향 프로그램의 장/단점

장점

- 코드 재사용 용이 (개념의 정의와 재사용이 자유로움)

  모듈화된 객체, 그리고 상속을 통해 코드의 재사용을 높일 수 있음

- 생산성 향상

  독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음 (이미 생성된 클래스를 상속 받거나, 객체를 재사용, 부분 수정 등 적은 노력으로 높은 효율을 만들어냄)

- 자연적인 모델링 가능 (실제 세계를 모델링하는데 적합하고 인간의 인지 방식과 가장 유사함)

  현실 세계에서 사용하는 개념을 대입하여 생각한 것을 그대로 구현할 수 있음

- 유지보수 용이

  프로그램 수정, 추가 시에도 캡슐화 덕분에 주변 코드에 영향이 덜 가기 때문에 유지보수가 용이함

 

단점

- 실행속도 느림

  전반적으로 객체지향 언어 (C++, Java, Ruby)는 컴퓨터의 처리 구조와 비슷한 절차지향 언어(C언어)보다 상대적으로 실행속도가 느림

- 프로그램 용량이 커질 수 있음

  객체단위로 프로그램을 많이 만들다보면 불필요한 정보들이 들어갈 수 있는데 프로그램의 용량이 증가될 수 있음

- 설계에 많은 시간 소요

  초기에 클래스별, 객체별, 상속 등의 구조 등을 모두 설계해야하기 때문에 절차지향 언어에 비해 설계 시간이 많이 듬

 

클래스와 객체

객체(Object) : 변수와 함수, 자료구조의 조합, 현실 세계의 사물에 대응

- 현실 세계의 개념, 사물을 프로그램에서 모델링한 것 또는 추상적인 개념

- 속성(데이터)과 기능(동작)을 가짐

- 객체는 변수화할 수 있음 → 인스턴스

 

클래스 : 객체를 만들기 위한 도구(설계도)로 표현하려는 목적/대상이라고 할 수 있음.

- 객체를 통해 클래스가 어떻게 동작하는지 구현할 수 있음

- 하나의 클래스로 여러 개의 인스턴스를 정의하는 데 사용됨

- 클래스의 구성

    - 속성 : 객체를 구성하는 데이터로 정보를 표시함

    - 메소드 : 객체가 행할 수 있는 모든 동작을 의미함. 즉 객체에 속한 함수

    - 생성자, 소멸자 : 객체 생성과 소멸 시에 호출되는 특별한 메소드

 

클래스 정의하기

- 멤버 변수 : 객체가 가지는 속성 또는 값

- 멤버 변수로의 접근 : Obj.variable

- 인스턴스 내부에서 접근 : self.variable

 

클래스를 이용하여 객체로 표현하기

1. 클래스 만들기

2. 클래스를 객체(or 인스턴스)로 선언하기

3. 객체로 선언하여 사용하기

 

- def 함수명(self):

Self는 클래스내에서 함수를 선언할 때 매개변수 처음으로 나와야 함

 

- 생성자 : 객체 초기화

객체를 생성하면서 속성값을 설정함

초기화 작업을 진행하기 위해서는 __init__()라는 특별한 메소드를 이용함

이것은 모든 객체에 기본적으로 내장되어 있고 객체 생성 후 가장 먼저 호출됨

생성자의 첫 번째 매개변수는 항상 'self'

 

- 객체의 멤버(속성과 메소드) 접근

객체.멤버 형태로 사용함

 

함수와 메소드의 차이점

- 함수와 메소드는 비슷한 개념으로 def를 사용하여 정의함

- 둘 다 정의한 이름 뒤에 ()가 붙음

- 함수는 외부에 별도로 존재하나 메소드는 클래스내에 존재함

  따라서 함수는 단독으로 사용하지만 메소드는 객체.메소드() 형태로 사용함

 

추상화(Abstraction)

- 객체들의 공통적인 특징(기능, 속성)을 추출해서 정의하는 것을 말함

  → 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악한 후, 필요 없는 특성을 제거해 하나의 묶음으로 만들어내는 과정

- 객체 지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있음

 

캠슐화(Encapsulation)

- 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근할 수 없도록 은닉하는 것

- 외부에서 객체를 손상시키는 일을 방지할 수 있도록 객체 내부의 세부적인 동작에 대한 구현을 감춤 (외부에서 접근할 필요 없는 것들은 접근 지정자를 private으로 두어 접근에 제한을 둘 수 있음)

  → 정보 은닉 : 다른 객체에세 자신의 정보를 숨기고 자신만의 연산을 통해 접근을 허용하는 것

- 캡슐화는 높은 응집도와 낮은 결합도를 유지함 (즉, 한 곳에서 변화가 일어나도 다른 곳에 미치는 영향을 최소화함)

 

상속성(Inheritance)

- 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려 받는 것

  → 이미 작성된 클래스를 받아서 조금만 수정해 새로운 클래스를 생성하는 것으로 기존 코드를 재활용해서 사용함으로써 코드의 생산성을 높여줌

- 객체 내의 어떤 메소드에서든 부모 클래스에 정의되어 있는 버전의 메소드를 호출하고 싶으면 super()를 이용

- 다중 상속은 자식 하나가 여러 부모로부터 상속을 받는 것

- 객체지향 프로그래밍에서 오버라이딩 : 기반(부모) 클래스로부터 상속받은 메소드를 다시 정의함

 

 

다향성(Polymorphism)

- 하나의 변수 또는 함수(클래스의 객체)가 명령을 받았을 때 상황에 따라 서로 다른 방식으로 동작하는 것임

- 동일한 명령을 각자 연결된 객체에 의존해서 해석하는 것을 뜻함

- 오버라이딩과 오버로딩이 있음

    - 오버라이딩 : 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것

    - 오버로딩 : 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

 

객체지향 설계 원칙(SOLID)

- 컴퓨터 프로그래밍에서 SOLID란 로버트 C. 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것

 

실습_27_객체와_클래스2.ipynb
0.04MB

'(Telechips) AI 시스템 반도체 SW 개발자 교육 > 비전과AI머신러닝' 카테고리의 다른 글

6일차  (0) 2025.04.21
5일차  (0) 2025.04.21
4일차  (0) 2025.04.17
2일차  (0) 2025.04.15
1일차  (0) 2025.04.14