성남 프론트엔드

13일차_ Anaconda / Python문법

sojsoj 2026. 7. 16. 16:42

Anaconda

오늘의 학습 정리 — 아나콘다 설치와 활용

참고: Python 학습 사이트

1. 아나콘다란?

아나콘다는 파이썬과 여러 패키지, 개발 도구를 편리하게 설치하고 관리할 수 있게 해주는 프로그램이다.

특히 가상환경을 만들어 프로젝트별로 파이썬 버전과 패키지를 따로 관리할 수 있다.

예를 들어:

  • py39: Python 3.9 학습 환경
  • cv_env: OpenCV 실습 환경

각 환경은 서로 독립되어 있어 한 환경에 설치한 패키지가 다른 환경에 영향을 주지 않는다.


2. 아나콘다 설치

  1. 아나콘다 공식 다운로드 페이지로 이동한다.
  2. Windows용 설치 프로그램을 내려받는다.
  3. 설치 프로그램을 실행한다.
  4. 설치 방식은 Just Me를 선택한다.
  5. 특별한 이유가 없다면 기본 설정으로 설치한다.
  6. 설치가 끝나면 Windows 검색창에서 Anaconda Prompt를 찾아 실행한다.

아나콘다 공식 설명에서도 Windows 설치 시 Just Me를 권장하며, PATH 옵션은 일반적으로 선택하지 않는 것을 권장한다. Windows 설치 안내

설치가 정상적으로 완료되면 Anaconda Prompt 앞부분에 다음과 같이 표시된다.

(base) C:\Users\사용자이름>

base는 아나콘다의 기본 환경이다.


3. 가상환경 만들기

Python 3.9를 사용하는 py39 환경을 만들려면 다음 명령어를 입력한다.

conda create -n py39 python=3.9

명령어의 의미:

  • conda create: 새로운 환경 생성
  • -n py39: 환경 이름을 py39로 지정
  • python=3.9: Python 3.9 설치

설치 도중 다음 질문이 나오면 y를 입력하고 Enter를 누른다.

Proceed ([y]/n)?

환경 이름은 원하는 이름으로 정할 수 있다.

conda create -n cv_env python=3.9

4. 가상환경 활성화

만든 환경을 사용하려면 먼저 활성화해야 한다.

conda activate py39

cv_env라는 환경을 사용한다면:

conda activate cv_env

활성화되면 프롬프트 앞에 현재 환경 이름이 나타난다.

(py39) C:\Users\Har27>

즉, 다음과 같이 이해하면 된다.

conda activate 환경이름

py39와 cv_env를 동시에 입력하는 것이 아니라, 내가 사용할 환경 이름 하나를 입력한다.


5. 가상환경 목록 확인

현재 컴퓨터에 만들어진 환경을 확인한다.

conda env list

또는:

conda info --envs

예시:

base    C:\Users\Har27\anaconda3
py39 *  C:\Users\Har27\anaconda3\envs\py39

여기서 * 표시는 현재 활성화된 환경을 뜻한다. 제공한 캡처에서는 py39 옆에 *가 있으므로 py39 환경이 정상적으로 활성화된 상태이다. Conda 환경 관리 안내


6. 패키지 설치

환경을 활성화한 뒤 필요한 패키지를 설치한다.

큰 그림 글씨 출력

pip install pyfiglet

터미널 글자에 색상 적용

pip install termcolor

웹캠 및 영상 처리

pip install opencv-python

중요한 순서:

conda activate py39
pip install pyfiglet

이렇게 하면 pyfiglet은 현재 활성화된 py39 환경에 설치된다.


7. 설치된 패키지 확인

현재 환경에 설치된 패키지 목록을 확인한다.

pip list

특정 패키지가 설치되었는지 확인하려면:

pip show pyfiglet

제공한 캡처에서는 다음 내용이 확인된다.

Successfully installed pyfiglet-1.0.4

따라서 pyfiglet 설치가 정상적으로 완료된 것이다.


8. 설치한 패키지 활용하기

pyfiglet으로 큰 글씨 출력

from pyfiglet import figlet_format

print(figlet_format("HAPPY", font="slant"))

글꼴과 색상을 함께 적용

from pyfiglet import figlet_format
from termcolor import colored

big_text = lambda text, font="standard", color="blue": colored(
    figlet_format(text, font=font),
    color
)

print(big_text("HAPPY", "slant", "magenta"))

각 입력값의 의미:

big_text("HAPPY", "slant", "magenta")
#         글자      글꼴       색상

termcolor에는 "pink" 색상이 없으므로 비슷한 "magenta" 또는 "light_magenta"를 사용한다.


9. 가상환경 종료

작업이 끝나면 현재 환경을 비활성화한다.

conda deactivate

실행 전:

(py39) C:\Users\Har27>

실행 후:

(base) C:\Users\Har27>

py39 표시가 사라졌다면 환경이 종료된 것이다.


핵심 명령어 요약

# 가상환경 생성
conda create -n py39 python=3.9

# 가상환경 활성화
conda activate py39

# 가상환경 목록 확인
conda env list

# 패키지 설치
pip install pyfiglet
pip install termcolor
pip install opencv-python

# 설치된 패키지 확인
pip list

# 현재 환경 종료
conda deactivate

가장 중요한 작업 흐름은 다음과 같다.

Anaconda Prompt 실행
→ 가상환경 생성
→ 가상환경 활성화
→ 필요한 패키지 설치
→ 파이썬 코드 실행
→ 가상환경 종료

Python

 

Python 변수 타입과 클래스, 정말 쉽게 이해하기

변수는 값을 가리키는 이름표이고, 클래스는 비슷한 물건을 여러 개 만들기 위한 설계도입니다.

 

1. 변수란 무엇일까?

변수는 값을 기억하기 위해 붙이는 이름표입니다.

다음은 파이선에서 변수를 지정하는 법입니다. 숫자에는 "" 를 붇이지 않습니다. 

name = "민수"
age = 20

이 코드는 다음과 같은 뜻입니다.

name ──→ "민수"
age  ──→ 20
  • name이라는 이름표가 "민수"라는 값을 가리킵니다.
  • age라는 이름표가 20이라는 값을 가리킵니다.
  • =는 오른쪽 값을 왼쪽 이름에 저장한다는 뜻입니다.
print(name)
print(age)

실행 결과:

민수
20

 

2. 변수 타입이란?

타입은 변수에 들어 있는 값의 종류입니다.

사람에게도 이름, 나이, 키처럼 서로 다른 정보가 있듯이 Python의 값에도 여러 종류가 있습니다.

name = "민수"       # 글자
age = 20            # 정수
height = 175.5      # 소수
is_student = True   # 참 또는 거짓

Python에서는 하나의 변수에 다른 종류의 값을 다시 넣을 수도 있습니다.

value = 10
value = "안녕하세요"

따라서 정확히 말하면 변수 자체에 고정된 타입이 있는 것이 아니라, 변수가 현재 가리키는 값에 타입이 있다고 이해하면 좋습니다.

Python 공식 입문 문서에서도 숫자, 문자열, 리스트 등을 서로 다른 값의 종류로 설명합니다. Python 공식 입문 문서

자주 사용하는 타입

타입의미예
int 소수점이 없는 정수 10, -3
float 소수점이 있는 실수 3.14, 175.5
str 글자와 문장 "Python"
bool 참 또는 거짓 True, False
list 순서가 있고 수정 가능한 목록 [10, 20, 30]
tuple 수정할 수 없는 목록 (10, 20)
dict 이름표와 값을 짝지어 저장 {"name": "민수"}
set 중복을 허용하지 않는 값의 모음 {1, 2, 3}
NoneType 값이 없는 상태 None

2-1. int: 정수

소수점이 없는 숫자입니다.

age = 20
score = 95

print(age + 1)

결과:

21

주로 나이, 개수, 점수처럼 소수점이 필요 없는 값을 저장합니다.


2-2. float: 실수

소수점이 있는 숫자입니다.

height = 175.5
temperature = 23.7
print(temperature + 1.5)

결과:

25.2

키, 몸무게, 온도, 비율 등에 사용합니다.


2-3. str: 문자열

글자나 문장을 나타냅니다. 문자열은 따옴표로 감쌉니다.

name = "민수"
message = "안녕하세요"

문자열끼리는 +를 사용해 연결할 수 있습니다.

print(name + "님, 안녕하세요!")

결과:

민수님, 안녕하세요!

다음 두 값은 겉보기에는 비슷하지만 타입이 다릅니다.

number1 = 10
number2 = "10"
  • 10은 계산할 수 있는 정수입니다.
  • "10"은 글자로 저장된 문자열입니다.
print(10 + 5)       # 15
print("10" + "5")   # 105

2-4. bool: 참과 거짓

조건이 맞는지 틀린지를 나타냅니다.

is_student = True
is_raining = False

주로 조건문과 함께 사용합니다.

if is_raining:
    print("우산을 챙기세요.")
else:
    print("우산이 필요 없습니다.")

True와 False의 첫 글자는 반드시 대문자로 작성합니다.


2-5. list: 여러 값을 담는 목록

리스트는 여러 값을 순서대로 보관합니다.

fruits = ["사과", "바나나", "딸기"]

Python의 순서는 1이 아니라 0부터 시작합니다.

값       사과   바나나   딸기
순서      0      1      2
print(fruits[0])

결과:

사과

리스트에는 새로운 값을 추가할 수도 있습니다.

fruits.append("포도")

print(fruits)

결과:

['사과', '바나나', '딸기', '포도']

2-6. dict: 이름표와 값을 함께 저장

딕셔너리는 데이터를 키: 값 형태로 저장합니다.

person = {
    "name": "민수",
    "age": 20,
    "job": "학생"
}

키를 이용해 원하는 값을 꺼낼 수 있습니다.

print(person["name"])
print(person["age"])

결과:

민수
20

딕셔너리는 이름, 나이, 직업처럼 각 값의 의미가 중요한 정보를 관리할 때 편리합니다.


2-7. 변수 타입 확인하기

type()을 사용하면 값의 타입을 확인할 수 있습니다.

name = "민수"
age = 20
height = 175.5

print(type(name))
print(type(age))
print(type(height))

결과:

<class 'str'>
<class 'int'>
<class 'float'>

type()은 객체가 어떤 타입인지 알려주는 내장 함수입니다. Python type() 공식 설명

그런데 결과에 왜 class라는 단어가 나올까요?

<class 'str'>

Python에서는 문자열, 정수, 리스트 같은 기본 타입도 모두 클래스로 만들어져 있기 때문입니다.

이제 클래스를 알아보겠습니다.


3. 클래스는 왜 필요할까?

게임 캐릭터를 관리하는 프로그램을 만든다고 생각해 보겠습니다.

캐릭터가 한 명이라면 다음처럼 만들 수 있습니다.

character1_name = "기사"
character1_hp = 100
character1_level = 1

두 명이 되면 변수가 늘어납니다.

character1_name = "기사"
character1_hp = 100
character1_level = 1

character2_name = "마법사"
character2_hp = 70
character2_level = 1

캐릭터가 100명이라면 어떻게 될까요?

character1_name
character1_hp
character1_level

character2_name
character2_hp
character2_level

character3_name
character3_hp
character3_level
...

변수가 너무 많아지고 어떤 정보가 누구의 것인지 관리하기 어려워집니다.

이럴 때 사용하는 것이 클래스입니다.


4. 클래스는 설계도다

클래스는 비슷한 특징을 가진 객체를 만들기 위한 설계도입니다.

게임 캐릭터에 비유하면 다음과 같습니다.

Character 클래스
      │
      ├── 기사 객체
      ├── 마법사 객체
      └── 궁수 객체

집을 짓는 설계도는 한 장이지만, 같은 설계도로 여러 채의 집을 만들 수 있습니다.

마찬가지로 클래스는 하나만 정의하고, 그 클래스로 여러 객체를 만들 수 있습니다.

Python 공식 문서에서는 새 클래스를 정의하면 새로운 타입이 만들어지고, 그 타입의 인스턴스를 만들 수 있다고 설명합니다. 여기서 인스턴스는 클래스로 만든 실제 객체를 뜻합니다. Python 클래스 공식 안내


5. 가장 간단한 클래스 만들기

먼저 내용이 없는 간단한 클래스를 만들어 보겠습니다.

class Character:
    pass

각 부분의 의미는 다음과 같습니다.

class Character:
#     클래스 이름
  • class: 클래스를 만들겠다는 Python 문법
  • Character: 클래스 이름
  • :: 클래스의 내용이 시작된다는 표시
  • pass: 아직 작성할 내용이 없다는 표시

일반적으로 클래스 이름은 각 단어의 첫 글자를 대문자로 작성합니다.

class GameCharacter:
    pass

6. 클래스로 객체 만들기

클래스를 정의했다면 실제 객체를 만들 수 있습니다.

class Character:
    pass


warrior = Character()
wizard = Character()
  • Character는 설계도입니다.
  • warrior는 그 설계도로 만든 객체입니다.
  • wizard도 같은 설계도로 만든 또 다른 객체입니다.
Character 설계도
      │
      ├── warrior
      └── wizard

두 객체는 같은 클래스로 만들었지만 서로 다른 객체입니다.

print(warrior)
print(wizard)

실행하면 두 객체의 메모리 위치가 다르게 표시됩니다.


7. 객체에 정보를 넣어보자

캐릭터마다 이름과 체력이 필요합니다.

이 정보는 __init__에서 저장할 수 있습니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

처음 보면 복잡해 보이지만 한 부분씩 나누면 어렵지 않습니다.


__init__은 처음 설정하는 곳

__init__은 객체가 만들어질 때 자동으로 실행됩니다.

warrior = Character("기사", 100)

객체를 만드는 순간 다음 값이 전달됩니다.

"기사" ──→ name
100     ──→ hp

그리고 다음 코드가 실행됩니다.

self.name = name
self.hp = hp

전달받은 이름과 체력을 해당 객체 안에 저장하는 것입니다.

완성된 객체는 다음과 같은 정보를 가집니다.

warrior
├── name: "기사"
└── hp: 100

8. self는 무엇일까?

self는 현재 작업 중인 객체 자기 자신을 뜻합니다.

쉽게 표현하면 다음과 같습니다.

self.name은 “내 이름”, self.hp는 “내 체력”이라는 뜻입니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

기사 객체를 만들면:

warrior = Character("기사", 100)

self는 warrior를 가리킵니다.

따라서 내부적으로 다음과 비슷하게 이해할 수 있습니다.

warrior.name = "기사"
warrior.hp = 100

마법사 객체를 만들면:

wizard = Character("마법사", 70)

이번에는 self가 wizard를 가리킵니다.

wizard.name = "마법사"
wizard.hp = 70

즉, self 덕분에 객체마다 자신의 정보를 따로 보관할 수 있습니다.


9. 객체의 정보 꺼내기

점 .을 사용하면 객체가 가진 정보를 확인할 수 있습니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp


warrior = Character("기사", 100)
wizard = Character("마법사", 70)

print(warrior.name)
print(warrior.hp)

print(wizard.name)
print(wizard.hp)

결과:

기사
100
마법사
70

이때 name과 hp를 속성이라고 합니다.

속성은 객체가 가지고 있는 정보입니다.


10. 객체에게 행동을 만들어주자

캐릭터가 자기소개하는 행동을 추가해 보겠습니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def introduce(self):
        print(f"나는 {self.name}입니다.")
        print(f"현재 체력은 {self.hp}입니다.")

클래스 안에 정의된 함수를 메서드라고 합니다.

warrior = Character("기사", 100)
warrior.introduce()

결과:

나는 기사입니다.
현재 체력은 100입니다.

메서드 안의 self.name은 메서드를 실행한 객체의 이름을 사용합니다.

wizard = Character("마법사", 70)
wizard.introduce()

결과:

나는 마법사입니다.
현재 체력은 70입니다.

같은 introduce() 메서드를 실행했지만 객체가 다르므로 결과도 달라집니다.


11. 공격받는 기능 추가하기

이번에는 캐릭터의 체력을 줄이는 기능을 만들어 보겠습니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def introduce(self):
        print(f"나는 {self.name}입니다.")
        print(f"현재 체력은 {self.hp}입니다.")

    def take_damage(self, damage):
        self.hp -= damage
        print(f"{self.name}이 {damage}의 피해를 받았습니다.")
        print(f"남은 체력: {self.hp}")

사용 방법:

warrior = Character("기사", 100)

warrior.take_damage(30)

결과:

기사가 30의 피해를 받았습니다.
남은 체력: 70

이 메서드에서:

self.hp -= damage

는 다음 코드와 같습니다.

self.hp = self.hp - damage

현재 객체의 체력에서 피해량을 빼고 다시 저장합니다.


12. 클래스 코드를 한 줄씩 읽어보기

전체 코드를 다시 살펴보겠습니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def introduce(self):
        print(f"나는 {self.name}입니다.")

    def take_damage(self, damage):
        self.hp -= damage
        print(f"남은 체력: {self.hp}")


warrior = Character("기사", 100)
warrior.introduce()
warrior.take_damage(30)

코드를 순서대로 해석하면 다음과 같습니다.

  1. Character라는 캐릭터 설계도를 만듭니다.
  2. 캐릭터를 만들 때 이름과 체력을 받습니다.
  3. 받은 이름과 체력을 객체 안에 저장합니다.
  4. 자기소개하는 행동을 정의합니다.
  5. 피해를 받는 행동을 정의합니다.
  6. 이름이 기사이고 체력이 100인 객체를 만듭니다.
  7. 기사가 자기소개합니다.
  8. 기사가 30의 피해를 받습니다.

13. 클래스의 핵심 용어

용어쉬운 의미코드
클래스 객체를 만드는 설계도 class Character:
객체 설계도로 만든 실제 대상 warrior
인스턴스 클래스로 만든 객체를 부르는 말 warrior
속성 객체가 가지고 있는 정보 self.name, self.hp
메서드 객체가 할 수 있는 행동 introduce()
__init__ 객체를 처음 만들 때 실행되는 설정 이름과 체력 저장
self 현재 사용 중인 객체 자기 자신 self.name

초보 단계에서는 객체와 인스턴스를 거의 같은 뜻으로 이해해도 괜찮습니다.


14. 함수와 클래스는 무엇이 다를까?

함수와 클래스는 서로 경쟁하는 문법이 아닙니다. 사용하는 목적이 다릅니다.

함수

하나의 작업을 묶을 때 사용합니다.

def add(a, b):
    return a + b

함수는 “어떤 일을 하는 도구”입니다.

클래스

관련된 정보와 행동을 하나로 묶을 때 사용합니다.

class Character:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def introduce(self):
        print(self.name)

클래스는 “정보와 행동을 함께 가진 대상의 설계도”입니다.

정리하면:

함수
└── 작업을 묶음

클래스
├── 정보인 속성을 묶음
└── 행동인 메서드를 묶음

15. 언제 클래스를 사용하면 좋을까?

다음처럼 같은 구조를 가진 대상을 여러 개 관리해야 할 때 클래스가 유용합니다.

  • 여러 명의 학생
  • 여러 개의 상품
  • 여러 대의 자동차
  • 여러 마리의 강아지
  • 여러 명의 게임 캐릭터
  • 여러 개의 은행 계좌

예를 들어 학생마다 이름과 점수가 있고, 자신의 결과를 출력해야 한다면 클래스로 묶을 수 있습니다.

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def show_result(self):
        print(f"{self.name}: {self.score}점")


student1 = Student("민수", 90)
student2 = Student("지영", 85)

student1.show_result()
student2.show_result()

결과:

민수: 90점
지영: 85점

마지막 핵심 정리

변수 타입

변수가 가리키는 값의 종류입니다.

age = 20                     # int
height = 175.5               # float
name = "민수"                # str
is_student = True            # bool
scores = [90, 80, 70]        # list
person = {"name": "민수"}    # dict

클래스

정보와 행동을 함께 묶어 비슷한 객체를 여러 개 만들기 위한 설계도입니다.

class 클래스이름:
    def __init__(self, 값):
        self.속성 = 값

    def 메서드(self):
        실행할 코드

처음에는 다음 세 문장만 기억해도 충분합니다.

클래스는 설계도다.
객체는 설계도로 만든 실제 대상이다.
self는 현재 객체 자기 자신이다.

'성남 프론트엔드' 카테고리의 다른 글

15일차_YOLO 심화  (1) 2026.07.21
14일차_DATA 수집 ~ YOLO 객체 탐지  (0) 2026.07.20
12일차_Vercel배포  (0) 2026.07.15
12일차_Node·Express /POST 보내기/  (0) 2026.07.14
10일차_React (components)  (0) 2026.07.10