Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 정석 기초편 ch8
- 스프링 mvc1 - 스프링 mvc
- 스프링 고급 - 스프링 aop
- jpa - 객체지향 쿼리 언어
- 스프링 db1 - 스프링과 문제 해결
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch13
- 스프링 mvc1 - 서블릿
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch11
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch4
- @Aspect
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch7
- 게시글 목록 api
- 자바의 정석 기초편 ch3
- 스프링 db2 - 데이터 접근 기술
- 스프링 입문(무료)
- 스프링 mvc2 - 검증
- 자바의 정석 기초편 ch12
- 스프링 mvc2 - 타임리프
- 타임리프 - 기본기능
- 자바의 정석 기초편 ch6
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch9
- 자바의 정석 기초편 ch1
Archives
- Today
- Total
나구리의 개발공부기록
Chapter 04 - 파이썬(연산자, 조건문 - if문, 반복문, 함수, 클래스, 클래스 상속) 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 6강 - 프로그래밍 언어 활용
Chapter 04 - 파이썬(연산자, 조건문 - if문, 반복문, 함수, 클래스, 클래스 상속)
소소한나구리 2024. 6. 23. 21:342024년도 수제비 실기책(6판) 내용 정리
4. 연산자
- 대부분 C언어 연산자와 동일하고 연산자의 종류가 많기 때문에 C언어에 없는 연산자만 다룸
- 파이썬은 ++, -- 증감연산자를 지원하지 않음
1) 연산자 종류
- Swap 연산자 : 두 변수의 값을 교환하며 ,(콤마) 를 기준으로 두 값을 교환함
- 산술 연산자 : 두 수의 수치 계산을 위한 연산자이며 사칙(+, -, *, /, //), 지수(**), 나머지(%) 연산이 있음
- 비교 연산자 : 두 피연산자가 같은지 다른지를 비교
- 대입 연산자 : 변수에 값을 할당 (+=, -=, *=, /= 는 자바와 동일하며 파이썬에는 **=, //= 를 추가로 제공)
# swap
a, b, c, d = 1, 2, 3, 4
print(a, b, c, d)
a, b, c, d = c, a, d, b
print(a, b, c, d)
# 1 2 3 4
# 3 1 4 2
# 산술
print(3 / 2) # 나눈 결과를 출력
print(3 // 2) # 몫을 출력
print(3 * 2)
print(3 ** 2) # 제곱
# 1.5
# 1
# 6
# 9
# 비교
print(3 == 3) # 같으면 True
print(5 != 3) # 다르면 True
# True
# True
# 대입
a, b = 3, 2
a *= b
print(a)
a **= b # a값과 b값을 거듭제곱한 값을 a에 저장
print(a)
a /= b # / 연산은 실수형으로 바꿔서 출력됨
print(a)
a = int(a) # a를 정수형으로 형변환
a //= b # a를 b로 나눈 몫을 a에 저장
print(a)
a %= b # a를 b로 나눈 나머지를 a에 저장
print(a)
# 6
# 36
# 18.0
# 9
# 1
5. 조건문 - if문
- if : 조건문이 참일 경우 if안의 명령문 실행
- elif : if문의 조건이 거짓이면서 elif문의 조건이 참일 경우 elif안의 명령문이 실행(자바, C의 else if의 개념), 여러개 사용 가능
- else : if문과 elif문이 모두 거짓일 때 else문안에 있는 명령문 실행(else는 사용하지 않거나 한번만 사용)
score = input() # 입력
score = eval(score) # 숫자로 변환
if score >= 90: # 100 ~ 90 사이의 숫자가 입력되면 해당 코드 출력
print('A')
elif score >= 80: # 89 ~ 80 사이의 숫자가 입력되면 해당 코드 출력
print('B')
elif score >= 70: # 79 ~ 70 사이의 숫자가 입력되면 해당 코드 출력
print('C')
else: # 그 외에는 모두 해당코드 출력
print('F')
# 입력 : 60
# F
6. 반복문
1) while문
- 조건문 뒤에 콜론(:)을 붙히며 조건식에 ()가 없으나 작동 방식은 다른 언어의 while문과 동일
- 파이썬에는 do-while이 없음
i = 0
sum = 0
while i < 4:
i = i + 1
sum = sum + i
print(sum)
2) for 문
- in 연산자 뒤에 range함수를 사용하여 반복의 범위를 지정하거나 리스트 개수만큼 반복을 수행
(1) 일반 for문
- range 함수는 범위를 지정하며 시작을 생략하면 0, 스텝값을 생략하면 1이 자동으로 들어감
- range 함수에 값이 하나일 경우 시작 = 0, 스텝 = 1이 자동으로 들어가고 값이 두개일 겨우 스텝 = 1이 자동으로 들어감
- range 함수의 범위는 종료값의 -1까지가 범위임
i, sum = 0, 0
for i in range (1, 4): # 시작 = 1, 종료 = 4(3까지), 스텝 = 1(자동), i는 1, 2, 3
sum = sum + i
print(sum) # 6, 1 + 2 + 3
i, sum = 0, 0
for i in range (4): # 시작1(자동), 종료 = 4(3까지), 스텝 = 1(자동), i는 0, 1, 2, 3
sum = sum + i
print(sum) # 6, 0 + 1 + 2 + 3
(2) for each문
- 시퀀스 자료형의 요소들을 차례대로 변수에 대입하면서 반복하는 명령어
li = [1, 2, 3] # 리스트
for a in li: # 리스트의 값을 하나씩 꺼내서 a에 저장
print(a) # a를 반환
# 1
# 2
# 3
7. 함수
1) 사용자 정의 함수(User-Defined Function)
- 사용자가 직접 새로운 함수를 정의하여 사용
- 다른 언어와 마찬가지로 사용자 정의 함수에서 매개변수나 생성된 변수는 해당 함수가 종료되면 사라짐
- def 함수명(변수명, ...):
명령어
return 반환값 - 기본값이 정의된 디폴트 매개변수를 지정할 수 있음
def fn(num = 5): # 디폴트 매개변수로 값을 5를 지정
if num % 2 == 0:
return 'Y'
else:
return 'N'
a = fn() # 함수 호출시 값을 지정하지 않고, 함수에 디폴트 매개변수가 정해져있다면 지정된 값으로 연산됨
print(a) # N
b = fn(10) # 함수 호출시 값을 지정하면 해당 값으로 연산됨
print(b) # Y
2) 람다 함수(Lambda Function)
- 함수 이름없이 동작하는 함수
- 매개변수에 값을 전달하면 표현식에서 연산을 수행
(1) 람다함수 문법
- 일반 람다 함수 : lambda 매개변수 : 표현식, 콜론(:)앞에서 매개변수를 입력받고 콜론 뒤에서 표현식을 처리
- 변수를 이용 : 람다 함수를 변수에 할당하여 재사용 할 수 있음
- 사용자 정의 함수를 이용 : 사용자 정의함수로 람다함수를 구현
- 내장 함수를 이용 : map, filter 함수와 같이 사용할 수 있음
함수 | 형태 | 설명 |
map | map(함수, 리스트) | 리스트의 요소를 함수에 전달하여 반복을 수행 |
filter | filter(함수, 리스트) | 리스트의 요소를 함수에 전달하여 조건이 참인 값을 반환 |
# 일반 lambda 매개변수들 : 표현식
print(((lambda n , m : n + m)(2, 3))) # (2, 3)을 전달
# 5
# 변수를 이용
sum = lambda x, y : x + y # 람다식을 변수에 저장,
print(sum(1, 2)) # sum 변수를 함수 호출하는 것처럼 사용
# 3
# 사용자 정의 함수를 이용
def fn(n): # 함수 정의
return lambda a : a * n
k = fn(3) # 3을 전달하여 호출 결과를 k에 저장 -> lambda a : a * 3이 저장됨
print(k(2)) # 변수를 이용한 람다식처럼 2를 전달하여 k를 호출하면 2 * 3을 연산하고 반환함
# 6
# map 함수 이용 - 리스트의 요소를 함수에 전달하여 반복 수행
a = [1, 2, 3, 4, 5]
m = list(map(lambda num : num + 2, a)) # a의 값을 하나씩 꺼내서 함수의 연산을 수행하고 반환
# 반환된 값을 list()로 리스트를 생성
print(m) # [3, 4, 5, 6, 7]
# filter 함수 이용 - 함수의 조건이 참인 값을 반환
a = [1, 2, 3, 4, 5]
f = list(filter(lambda num : num > 2, a)) # a의 값을 하나씩 꺼내서 함수의 조건이 참인 값만 반환
print(f) # [3, 4, 5]
8. 클래스
- 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀
- 함수명에 매개변수 앞에 self라는 키워드를 적어야함(입력받는 값이 없다면 self만 사용)
1) self
- 현재 객체를 가리키는 키워드, 클래스 내부의 변수와 함수를 가리킬 수 있음
class Soojebi: # 클래스 정의
def setS(self, a): # 클래스 메서드 정의
self.a = a # 매개변수의 값을 클래스 변수 a에 저장
def getS(self):
return self.a # 클래스변수 a에 반환
a = Soojebi() # 변수 a에 클래스 생성
a.setS(5) # 전달인자를 5로하여 setS함수 호출
print(a.getS()) # getS함수를 호출하여 Soojebi클래스의 변수 a값을 반환
// 5
2) 생성자(Constructor) / 소멸자(Destructor)
(1) 생성자
- 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드
- __init__ 이라는 메서드 명을 사용하고 첫 번째 매개변수로 self를 작성하며 반환값이 없음
(2) 소멸자
- 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용되는 메서드
- __del__ 이라는 메서드 명을 사용하고 첫 번째 매개변수로 self를 작성하며 반환값이 없음
class Soojebi:
def __init__(self): # 매개변수가 없는 생성자
print("생성자1")
def __init__(self, a): # 매개변수가 있는 생성자
print("생성자2")
# 파이썬에서는 클래스 내에 여러 개의 __init__ 메서드를 정의할 수 없음 -> 마지막에 정의된 생성자만 작동됨
def __del__(self): # 소멸자
print("소멸자")
def fn(self): # 일반 사용자 정의 함수
print("일반함수")
s = Soojebi(5) # 객체 생성 -> 매개변수가 있는 생성자가 호출됨
s.fn() # 일반 함수 호출
del s # 소멸자 호출. 소멸자는 호출하지 않아도 프로그램이 종료되면 가비지 컬렉터에 의해 자동으로 s가 정리되면서 소멸자가 호출됨
# 생성자2
# 일반함수
# 소멸자
3) 클래스 접근 제어자
- 파이썬은 Private, public 등의 접근 제어자 키워드가 존재하지 않고 작명법(Naming)으로 접근제어를 함
종류 | 규칙 | 설명 |
public | 밑줄이 접두사에 없어야 함 | 외부의 모든 클래스에서 접근이 가능 |
protected | 한 개의 밑줄(_)이 접두사여야 함 | 같은 패키지 내부에 있는 클래스, 하위 클래스(상속받은 경우)에서 접근이 가능 자기 자신과 상속받은 하위 클래스 둘 다 접근이 가능 |
private | 두 개의 밑줄(__)이 접두사여야 함 | 같은 클래스 내에서만 접근이 가능 |
class Soojebi:
def __init__(self):
self.public = "PUBLIC" # public으로 설정된 변수
self._protected = "PROTECTED" # protected로 설정된 변수
self.__private = "PRIVATE" # private로 설정된 변수
def fn(self):
print(self.public)
print(self._protected)
print(self.__private)
s = Soojebi()
s.fn() # s의 fn함수를 호출하면 클래스 내부에서 작동하기 때문에 모든 변수의 값이 출력됨
# PUBLIC
# PROTECTED
# PRIVATE
print(s.public) # 클래스 외부에서 public 변수를 불러올 수 있음
print(s._protected) # 클래스 외부에서 _protected 변수를 불러올 수 있음
# print(s.__private) # 에러, 클래스 외부에서 __private 변수를 불러올 수 없음(private)
print(s._Soojebi__private) # 이런 식으로 변수에 접근할 수 있지만 일반적으로 권장하지 않음
# PUBLIC
# PROTECTED
# PRIVATE
9. 클래스 상속(Inheritance)
- 어떤 객체가 있을 때 그 객체의 변수와 메서드를 다른 객체가 물려받는 기능
- class 자식 클래스명(부모클래스명):
... - ** 자바는 상속 시 부모 클래스 생성자를 호출하지만, 파이썬은 호출하지 않음, super로 직접 호출해야함
1) 메서드 오버라이딩(Overriding)
- 하위 클래스에서 상위 클래스 메서드를 재정의
- 메서드가 상위 클래스에 존재해야하고, 메서드 이름이 같아야하고, 매개변수의 개수, 데이터 타입이 같아야 함
2) 부모 클래스 접근
- super 키워드로 상위 클래스의 변수나 메서드에 접근할 수 있음
class A:
def __init__(self):
print('A')
def fn(self):
print('B')
class B(A): # A클래스를 상속받은 B클래스, A - 부모, B - 자식
def __init__(self):
print('C')
super().__init__() # 조상 클래스의 생성자를 직접 호출
def fn(self): # 메서드 오버라이딩
print('D')
super().fn()
a = A() # a클래스 객체를 생성 -> 1. A 출력(클래스 A의 생성자 호출)
b = B() # b클래스 객체를 생성 -> 2. C 출력(클래스 B의 생성자 호출)
# 3. A 출력(super()로 조상클래스이 생성자 호출)
b.fn() # b클래스의 fn메서드 출력 -> 4. D 출력(메서드 오버라이딩)
# 5. B 출력(메서드 오버라이딩으로 조상의 fn()함수를 호출)
# A
# C
# A
# D
# B
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 6강 - 프로그래밍 언어 활용' 카테고리의 다른 글
Chapter 04 - 파이썬(예상문제) (0) | 2024.06.24 |
---|---|
Chapter 04 - 파이썬(기출문제) (0) | 2024.06.23 |
Chapter 04 - 파이썬(파이썬 기본구조, 자료형, 입출력 함수) (0) | 2024.06.23 |
Chapter 03 - 자바(예상문제) (0) | 2024.06.23 |
Chapter 03 - 자바(기출문제_3) (0) | 2024.06.22 |