yon11b

[SK 쉴더스 루키즈] 파이썬 기초 1(변수, 객체, 메서드) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 파이썬 기초 1(변수, 객체, 메서드)

yon11b 2026. 3. 3. 18:26
반응형

파이썬 언어 설명

파이썬은 인터프리터 언어이다.

  • 컴파일 언어
    • 실행하기 전에 컴파일을 하고 실행하는 언어
    • C, C++, JAVA
    • 복잡, 규칙 많아짐
    • 문제가 없을 시에 실행이 가능
  • 인터프리터 언어
    • 미리 컴파일 하지 말고 한 줄씩 실행하자
    • 규칙이 미리 만들어져 있지 않아도 된다.
      • 규칙이 느슨하다.

어느 시점에 에러가 날지 모른다.
여기서 말하는 규칙이란?

더보기
더보기
1. 데이터 타입의 규칙 (정적 타이핑 vs 동적 타이핑) 
  • 컴파일 언어 (엄격): 변수를 만들 때 이게 숫자인지 문자열인지 미리 선언해야 합니다. 한 번 정하면 바꿀 수 없습니다.
    • C언어 예시: int age = 25; (반드시 정수라고 명시)
  • 인터프리터 언어 (느슨): 변수에 아무 값이나 넣어도 실행 시점에 파이썬이 "아, 지금은 숫자구나"라고 알아서 판단합니다.
    • 파이썬 예시: age = 25 (선언 없이 바로 사용)
2. 메모리 관리의 규칙
  • 컴파일 언어 (수동): 개발자가 메모리를 직접 할당하고, 사용이 끝나면 직접 해제해야 하는 규칙이 있습니다. (잘못하면 프로그램이 뻗어버립니다.)
  • 인터프리터 언어 (자동): 가비지 컬렉터(Garbage Collector)라는 도구가 뒤에서 쓰레기 메모리를 알아서 치워줍니다. 개발자가 메모리 규칙을 일일이 신경 쓸 필요가 없습니다.
  • 3. 문법의 구조적 규칙*
  • 컴파일 언어: 세미콜론(;) 누락, 중괄호({}) 위치, 반환 값의 타입 등 사소한 규칙 하나만 어겨도 컴파일 단계에서 "에러!"를 외치며 실행조차 시켜주지 않습니다.
  • 인터프리터 언어: 문법이 상대적으로 인간의 언어와 비슷하고 간결합니다. 줄 바꿈이나 들여쓰기 정도만 잘 지키면 비교적 자유롭게 코드를 짤 수 있습니다.

tenserflow는 11버전이 안정적이다. 그러므로 최신 버전인 14버전이 아닌 11버전을 설치할 것이다!

가상환경 만들기

ctrl stift p ⇒ python create environment ⇒ venv ⇒ python 원하는 버전(우리는 3.11)

venv 폴더 안에 있는 pip, python.exe를 쓸 거다! 이게 바로 가상환경!

 

주피터 노트북 확장자: .ipynb

확장자만 저렇게 해줘도 이런 화면이 나온다.

코드 실행 방법

  • select kernel -> .venv 선택
  • package 설치 -> ipykernel package
    • 이거 설치하면 .venv/lib 안에 새로운 패키지들이 설치가 된다.

(실행 안 되면 ctrl shift p 한 다음 reload windows 해주면 된다.)

한 줄만 실행: ctrl enter / 한 줄 실행하고 밑에 새로운 cell 생성: alt enter

 

본격적인 문법 설명

변수는 왜 쓸까? → 기억해 두었다가 필요할 때 꺼내써 쓰기 위해서!

인터프리터 언어의 특징: 변수에 주소값을 저장한다.

num=10일때, num에는 10이 저장되는 것이 아니라, 10이 저장되어있는 주소값이 저장되어 있다.== 객체에 변수를 연결한다.

1407~~~: 파이썬에서 부여한 고유한 메모리 주소(찐 메모리 주소는 아님)

변수를 알면 데이터 참조와 함수를 사용할 수 있다.
num1. ⇒ 변수.함수이름()

 

자료형에 따라 저장하는 방식이 다르다. == 메모리 구성이 다르다. == 연산이 달라진다.

자료형 확인: type()함수 사용

type(num)은 단순한 결과값이 아니라 '타입 클래스'를 가리키는 객체라는 것을 보여준다.

 

++ int가 클래스라는 걸 보고 int 클래스 정의를 찾아보다가 -5에서 256까지는 미리 객체를 만들어서 재사용 한다는 것을 알게 되었다.

256이하일 때는 이미 만들어진 객체를 재사용하니까 a와 b가 같은 객체를 가리키게 된다. 앞서도 말했듯이 a와 b에는 숫자가 할당되는 것이 아니라 그 숫자(객체)가 저장된 주소를 가리키기 때문이다.

하지만 257부터는 캐싱되지 않은 객체이기 때문에 a에 대입할 때 새 객체 생성, b에 대입할 때 또 새 객체를 생성한다.

==: 값이 같은가(값 비교)

is: 같은 객체인가(값 비교가 아니라 메모리 주소 비교이다.)

 

메서드: 객체가 가지는 함수

upper()는 메서드이다.

 

메서드 예

.count
.find
.join
.index
.upper
.lower
.lstrip
.rstrip
.strip
.replace
.split

 

NameError → print(str_100) / not defined

IndexError→ str_6[30]

728x90