Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼

  1. 홈
  2. 블로그
  3. 소프트웨어 개발

소프트웨어 개발

Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼

실제적인 것을 구축하여 객체 지향 Python을 배우십시오. 클래스를 만들고, self와 __init__을 이해하고, 상속을 통해 동작을 공유하고, 속성으로 데이터를 보호하고, 클래스가 잘못된 도구인 경우를 파악하세요.

읽는 시간 10분
Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼

핵심 요약

  • 클래스는 청사진이고, 객체는 이를 기반으로 만들어진 것입니다.
  • __init__은 각각의 새 객체를 설정하고 self는 해당 객체를 참조합니다.
  • 클래스에 설정된 속성은 공유됩니다. self에 설정된 속성은 하나의 개체에 속합니다.
  • 데이터 보유 클래스에는 @dataclass을 사용하고, 유지할 상태가 없을 때는 간단한 함수를 선호합니다.

스크립트가 커짐에 따라 함수 간에 동일한 변수 그룹을 전달하게 되고 어떤 데이터가 어떤 로직에 속하는지 알기가 어려워집니다. Python 클래스와 객체는 데이터와 동작을 하나의 단위로 묶어 이 문제를 해결합니다.

이 튜토리얼에서는 작은 은행 계좌를 단계별로 구축하고 문제가 해결될 때만 각 OOP 아이디어를 추가합니다. 우리는 Python 3.13에서 모든 예제를 실행했으며 표시된 출력은 해당 실행에서 나온 것입니다. Python을 처음 사용하는 경우 초보자를 위한 Python 튜토리얼을 먼저 읽어보세요.

클래스와 객체란 무엇입니까?

클래스는 무엇이고 무엇을 할 수 있는지 설명합니다. 인스턴스라고도 불리는 객체는 해당 설명을 바탕으로 생성된 특정 객체입니다. “Account”는 클래스이고 Asha의 계정과 Ben의 계정은 두 개의 개체입니다.

기간 의미 예
수업 청사진 계정
객체 또는 인스턴스 그것으로 만든 것 하나 a = 계정("아샤")
속성 객체에 대한 데이터 a.balance
방법 클래스의 함수 a.deposit(50)

당신은 계속해서 객체를 사용해 왔습니다. Python에서는 문자열, 목록, 심지어 함수도 객체이므로 "hello".upper()을 쓸 수 있습니다.

첫 수업

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("amount must be positive")
        self.balance += amount
        return self.balance

a = Account("Asha", 100)
b = Account("Ben")

a.deposit(50)
print(a.balance, b.balance)

# 150 0

__init__은 객체를 생성할 때마다 자동으로 실행되며 시작 상태를 설정합니다. a에 입금해도 b은 건드리지 않았습니다. 왜냐하면 각 개체에는 고유한 데이터가 있기 때문입니다. 이 방법은 또한 잘못된 값으로부터 잔액을 보호합니다. Python 예외 처리 가이드에서는 raise를 더 자세히 설명합니다.

자아란 무엇인가?

self은 단순히 메소드가 작업 중인 객체입니다. a.deposit(50)를 작성하면 Python은 효과적으로 Account.deposit(a, 50)을 호출하여 객체를 첫 번째 인수로 전달합니다. 이것이 바로 하나의 메소드 정의가 모든 객체에 서비스를 제공할 수 있는 방법입니다.

이름 self은 키워드라기보다는 강력한 규칙이지만 항상 사용하십시오. 메서드 정의에서 이를 잊어버리는 것은 가장 일반적인 초보자 오류이며 인수 수에 대한 혼란스러운 메시지를 생성합니다.

클래스 속성과 인스턴스 속성

클래스 본문에 직접 설정된 속성은 모든 객체에서 공유됩니다. self의 한 세트는 해당 개체에만 속합니다. 이 예에서는 조회 동작 방식을 보여줍니다.

class Account:
    interest_rate = 0.04    # class attribute

    def __init__(self, owner, balance=0):
        self.owner = owner  # instance attribute
        self.balance = balance

a = Account("Asha", 100)
b = Account("Ben")
print(a.interest_rate, b.interest_rate)   # 0.04 0.04

Account.interest_rate = 0.05
print(a.interest_rate, b.interest_rate)   # 0.05 0.05

a.interest_rate = 0.09
print(a.interest_rate, b.interest_rate, Account.interest_rate)
# 0.09 0.05 0.05

마지막 줄은 사람들을 놀라게 합니다. a을 통해 할당해도 공유 값은 변경되지 않았습니다. 클래스 1을 숨기는 a에 새 인스턴스 속성을 만들었습니다. Python은 먼저 객체를 살펴본 다음 클래스를 찾습니다.

특수(던더) 방법

이중 밑줄이 있는 메서드를 사용하면 개체가 Python의 내장 기능과 함께 작동할 수 있습니다. 이것이 없으면 계정을 인쇄하면 쓸모없는 메모리 주소가 표시됩니다. 두 개를 추가하면 읽을 수 있는 형식이 됩니다.

    def __str__(self):
        return f"{self.owner}: {self.balance}"

    def __repr__(self):
        return f"Account({self.owner!r}, {self.balance})"

print(a)        # Asha: 150
print([a, b])   # [Account('Asha', 150), Account('Ben', 0)]
방법 촉발 원인
__init__ 객체 생성
__str__ print(obj), str(obj)
__repr__ 디버깅 또는 목록에 표시
__eq__ a == b
__len__ len(obj)
__add__ a + b

상속

상속을 통해 새 클래스는 기존 클래스를 재사용하고 차이점만 변경할 수 있습니다. 여기서 Savings은 추가 설정이 있는 Account입니다.

class Savings(Account):
    def __init__(self, owner, balance=0, limit=3):
        super().__init__(owner, balance)
        self.limit = limit

    def __str__(self):
        return f"{super().__str__()} (savings)"

s = Savings("Chitra", 500)
s.deposit(100)
print(s, isinstance(s, Account), s.limit)

# Chitra: 600 (savings) True 3

super()은 상위 버전을 호출하므로 설정 논리가 반복되지 않습니다. deposit는 그대로 상속받았고, __str__은 오버라이드하여 라벨을 추가했습니다. 실제 “is a” 관계에만 상속을 사용하세요. 엔진이 필요한 자동차와 같이 클래스에 무언가만 필요한 경우 해당 객체를 속성으로 지정하세요. 이를 구성이라고 하며 일반적으로 깊은 상속 체인보다 더 유연합니다.

다형성

다형성은 서로 다른 객체가 각자의 방식으로 동일한 메서드 호출에 응답할 수 있음을 의미합니다. 호출 코드는 정확한 유형을 알 필요가 없습니다.

class Square:
    def __init__(self, side):
        self.side = side
    def area(self):
        return self.side ** 2

class Circle:
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        return round(3.14159 * self.radius ** 2, 2)

for shape in [Square(3), Circle(2)]:
    print(type(shape).__name__, shape.area())

# Square 9
# Circle 12.57

이 두 클래스는 부모를 공유하지도 않습니다. Python은 객체에 오리 타이핑이라고 알려진 접근 방식인 area 메서드가 있는지에만 관심을 갖습니다. 나중에 Triangle을 추가하면 루프를 변경할 필요가 없습니다.

캡슐화 및 속성

Python에는 진정한 비공개 속성이 없으며 대신 규칙에 의존합니다. _price과 같이 단일 밑줄은 다른 개발자에게 “이것은 내부이므로 만지지 마십시오”라고 알려줍니다. 설정된 값을 확인하려면 외부에서 보면 일반 속성처럼 보이는 속성을 사용하세요.

class Product:
    def __init__(self, price):
        self.price = price

    @property
    def price(self):
        return self._price

    @price.setter
    def price(self, value):
        if value < 0:
            raise ValueError("price cannot be negative")
        self._price = value

p = Product(100)
p.price = 150
print(p.price)      # 150
p.price = -5        # ValueError: price cannot be negative

이는 일반 속성으로 시작하여 나중에 클래스를 사용하는 코드를 변경하지 않고도 유효성 검사를 추가할 수 있음을 의미합니다. 따라서 Java에서처럼 습관적으로 get_price() 및 set_price() 메서드를 작성하지 마십시오. 여기서 @ 구문은 데코레이터이며, 이는 Python 데코레이터 설명에서 설명합니다.

클래스 메서드와 정적 메서드

class Temperature:
    def __init__(self, celsius):
        self.celsius = celsius

    @classmethod
    def from_fahrenheit(cls, f):
        return cls(round((f - 32) * 5 / 9, 1))

    @staticmethod
    def is_freezing(celsius):
        return celsius <= 0

Temperature.from_fahrenheit(212).celsius   # 100.0
Temperature.is_freezing(-3)                # True
유형 첫 번째 인수 다음 용도로 사용하세요.
인스턴스 방법 자기 한 개체의 데이터로 작업하기
@classmethod cls 대체 생성자
@staticmethod 없음 수업 관련 도우미

데이터 클래스

클래스가 대부분 데이터를 보유하는 경우 __init__, __repr__ 및 __eq__을 직접 작성하는 것은 지루한 일입니다. @dataclass는 유형 주석에서 이를 생성합니다.

from dataclasses import dataclass, field

@dataclass
class Item:
    name: str
    price: int
    tags: list = field(default_factory=list)

print(Item("Pen", 10))
print(Item("Pen", 10) == Item("Pen", 10))

# Item(name='Pen', price=10, tags=[])
# True

팁: 모든 것에 클래스가 필요한 것은 아닙니다. 상태가 없고 동작이 하나만 있는 경우 일반 함수가 더 간단합니다. 간단한 검색의 경우 사전이면 충분할 수 있습니다. 데이터와 이를 보호하는 규칙이 명확하게 함께 속할 때 클래스를 달성하세요.

일반적인 실수

변경 가능한 클래스 속성 사용

이것은 고전적인 버그입니다. 목록은 클래스에 정의되어 있으므로 모든 카트가 이를 공유합니다.

class Cart:
    items = []            # shared by every cart!

    def add(self, item):
        self.items.append(item)

c1, c2 = Cart(), Cart()
c1.add("pen")
print(c2.items)

# ['pen']

self.items = []를 사용하여 __init__에서 생성하면 모든 객체가 자체 목록을 갖게 됩니다.

기타 일반적인 오류

  • self를 잊어버렸습니다. 메서드 내부에 balance가 아닌 self.balance을 씁니다.
  • 잊어버림 super().__init__(). 그러면 자식은 부모가 설정한 속성을 놓칩니다.
  • 거대한 클래스를 구축합니다. 모든 작업을 수행하는 클래스는 테스트하기 어렵습니다. 책임별로 나누어 보세요.
  • 깊은 상속. 일반적으로 두 수준이면 충분하며 구성이 더 명확한 경우가 많습니다.
  • 테스트를 작성하지 않습니다. 규칙이 있는 클래스는 pytest 튜토리얼에서 작은 카트를 사용하여 보여주듯이 테스트하기 쉽습니다.

마무리

객체 지향 Python은 데이터를 보호하는 동작으로 데이터를 그룹화합니다. __init__, 메서드, __str__로 시작한 다음 문제가 해결되면 상속과 속성을 추가하세요. 다음 단계에서는 동일한 몇 가지 변수를 모든 곳에서 전달하는 스크립트를 가져와 이를 하나의 작은 클래스로 변환합니다.

자주 묻는 질문

클래스와 객체의 차이점은 무엇입니까?

클래스는 정의 또는 청사진입니다. 객체는 자체 데이터를 가지고 생성된 특정 인스턴스입니다. 하나의 클래스가 여러 객체를 생성할 수 있습니다.

__init__은 Python에서 무엇을 합니까?

객체를 생성할 때 자동으로 실행되는 초기화 프로그램입니다. 일반적으로 전달한 인수에서 객체의 시작 속성을 설정합니다.

파이썬에서 자아란 무엇입니까?

self는 메소드가 호출되는 객체를 나타냅니다. Python은 이를 자동으로 전달하고 메소드가 해당 객체의 속성을 읽고 변경할 수 있도록 합니다.

OOP의 네 가지 기둥은 무엇입니까?

캡슐화, 추상화, 상속, 다형성이 그것이다. 함께, 데이터를 동작과 함께 묶고, 세부 정보를 숨기고, 코드를 재사용하는 데 도움이 됩니다.

언제 함수 대신 클래스를 사용해야 합니까?

데이터와 동작이 여러 작업에 걸쳐 함께 속해 있는 경우 클래스를 사용합니다. 상태 비저장 작업의 경우 일반 함수가 더 간단하고 테스트하기 쉽습니다.

계속 학습하세요

Stack Quora와 작업

테스트, WordPress 또는 SEO에 도움이 필요하십니까?

우리는 팀이 더 나은 소프트웨어를 출시하고 사이트를 성장시킬 수 있도록 돕습니다. 현재 진행 중인 작업을 알려주시면 명확한 다음 단계를 제안해 드리겠습니다.

계속 읽으세요

추가 가이드 테스트, AI 및 최신 개발

이 기사가 마음에 드셨나요? 주제를 선택하고 최신 튜토리얼로 바로 이동하세요.

인공지능

AI 환각 설명: 언어 모델이 사물을 구성하는 이유와 이를 줄이는 방법

AI 환각은 그것이 무엇인지, 언어 모델이 환각을 생성하는 이유, 일반적인 유형, 접지 및 프롬프트를 통해 환각을 줄이는 방법, 그리고 우리가 실행한 간단한 점검에 대해 설명했습니다.

기사 읽기 →
DevOps

환경 변수 설명: .env 파일, 비밀 및 구성이 올바르게 완료되었습니다.

우리가 실행한 Python 예제를 통해 설명된 환경 변수: 읽기 및 설정, 모든 값이 문자열인 이유, .env 파일, 프로세스 상속, 비밀 및 유효성 검사.

기사 읽기 →
소프트웨어 개발

API 속도 제한 설명: 알고리즘, 헤더 및 429 오류 처리

우리가 실행한 시뮬레이션을 통해 설명된 API 속도 제한: 토큰 버킷, 고정 창, 슬라이딩 창, 429 응답, 속도 제한 헤더, 백오프를 사용한 재시도 및 테스트 제한.

기사 읽기 →
테스트 자동화

Python에서 조롱: unittest.mock, 패치 및 테스트를 거짓말로 만드는 실수

Unittest.mock을 사용하여 Python에서 모의, 테스트됨: 모의 및 return_value, 부작용, 이름이 사용되는 패치, 사양 및 자동 사양, 모의 날짜 및 일반적인 실수.

기사 읽기 →
소프트웨어 테스트

코드 커버리지 설명: 회선 커버리지와 분기 커버리지 및 100%의 실제 의미

실제 Coverage.py 실행을 통해 설명되는 코드 적용 범위: 라인, 분기 및 조건 적용 범위, 보고서 읽기, 100% 적용 범위가 여전히 버그를 놓칠 수 있는 이유 및 합리적인 대상.

기사 읽기 →
데이터베이스 및 SQL

SQL의 DELETE vs TRUNCATE vs DROP: 차이점, 롤백 및 사용 시기

테스트된 SQL을 통해 DELETE 대 TRUNCATE 대 DROP에 대해 설명합니다. 각각의 제거, 롤백, 트리거, ID 재설정, 속도 및 PostgreSQL, MySQL, SQL Server 및 SQLite의 차이점.

기사 읽기 →
데이터베이스 및 SQL

SQL 뷰 설명: 예제를 통해 함정 생성, 사용 및 방지

우리가 실행한 쿼리로 설명된 SQL 뷰: 뷰 생성, 실시간 결과, 열 숨기기, 성능, 업데이트 가능하고 구체화된 뷰, 손상된 종속성 및 모범 사례.

기사 읽기 →
소프트웨어 개발

TypeScript 인터페이스와 유형: 실제 차이점, 컴파일러로 테스트

TypeScript 인터페이스 대 유형, 실제 컴파일러로 확인: 둘 다 할 수 있는 것, 하나만 할 수 있는 것, 선언 병합, 확장 대 교차점 및 따라야 할 간단한 규칙.

기사 읽기 →
소프트웨어 개발

Python *args 및 **kwargs 설명: 명확한 예가 포함된 유연한 함수

Python *args 및 **kwargs는 우리가 실행한 코드(패킹 및 언패킹, 매개변수 순서, 키워드 전용 및 위치 전용 인수, 데코레이터 및 일반적인 오류)를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Python Lambda 함수: 구문, 실제 사용 및 사용하지 말아야 할 경우

Python 람다 함수는 구문, 키를 사용한 정렬, 맵 및 필터, 클로저, 후기 바인딩 트랩, 일반 def가 더 나은 선택인 경우 등 우리가 실행한 코드로 설명되었습니다.

기사 읽기 →
인공지능

AI 에이전트란 ​​무엇입니까? 작동 방식, 간단한 에이전트 루프를 사용하여 실행할 수 있음

AI 에이전트란 무엇입니까? 우리가 실행한 작은 Python 루프, 실제 위험 및 간단한 챗봇이 더 나은 선택일 때 에이전트 루프, 도구, 메모리 및 가드레일에 대한 일반 가이드입니다.

기사 읽기 →
DevOps

모니터링과 관찰 가능성: 로그, 지표, 추적을 통한 실제 차이점

모니터링과 관찰 가능성 설명: 알려진 오류와 알려지지 않은 오류, 로그, 지표 및 추적, 결제 사건 안내, 골든 신호, OpenTelemetry 및 유용한 경고.

기사 읽기 →
DevOps

Docker 볼륨과 바인딩 마운트: 컨테이너 데이터를 올바른 방식으로 유지

Docker 볼륨과 바인드 마운트 설명: 컨테이너 데이터가 사라지는 이유, 명명된 볼륨, 바인드 마운트, tmpfs, Compose 예제, 백업, 권한 및 각 사용 시기.

기사 읽기 →
테스트 자동화

TDD와 BDD: 주요 차이점, 두 가지 방식으로 구축된 하나의 기능 및 각 사용 시기

TDD와 BDD는 두 가지 방식으로 구축된 하나의 할인 기능, 즉 우리가 실행한 코드를 사용한 적록 리팩토링, 주어진 시점 시나리오, 도구, 장단점 및 각 사용 시기를 설명합니다.

기사 읽기 →
소프트웨어 테스트

UAT(사용자 승인 테스트): 프로세스, 체크리스트 및 실제 사례

사용자 승인 테스트는 누가 실행하는지, QA와 어떻게 다른지, 7단계 프로세스, UAT 테스트 사례 템플릿, 체크리스트, 승인 기준 및 일반적인 실수에 대해 설명했습니다.

기사 읽기 →
데이터베이스 및 SQL

SQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정

우리가 실행한 쿼리를 통해 설명된 SQL NULL 값: 3개 값 논리, IS NULL, COALESCE, NULLIF, 집계, 조인 및 정렬이 NULL을 처리하는 방법 및 조용히 발생하는 버그.

기사 읽기 →
데이터베이스 및 SQL

SQL CASE WHEN 문: 구문, 실제 예 및 일반적인 실수

우리가 실행한 쿼리로 설명된 SQL CASE: 단순 및 검색 양식, 조건 순서, SUM이 있는 피벗, COUNT 트릭, 사용자 정의 정렬, 업데이트 및 피해야 할 NULL 트랩.

기사 읽기 →
소프트웨어 개발

JWT란 무엇입니까? 실제 예제로 설명되는 JSON 웹 토큰

JWT란 무엇입니까? JSON 웹 토큰은 세 부분, 즉 우리가 실행한 코드에서 구축 및 변조된 토큰, JWT 대 세션, 저장소, 새로 고침 토큰 및 보안 실수를 설명했습니다.

기사 읽기 →
소프트웨어 개발

JavaScript 이벤트 루프 설명: 예제가 포함된 호출 스택, 마이크로태스크 및 타이머

호출 스택, 작업 및 마이크로태스크 대기열, setTimeout 0이 즉시 실행되지 않는 이유, 차단, 기아 및 인터뷰 퀴즈 등 우리가 실행한 코드로 JavaScript 이벤트 루프를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Python 생성기 및 수율 설명: 실제 예제로 메모리 절약

Python 생성기와 항복은 우리가 실행한 코드로 설명됩니다. 일시 중지 및 재개 방법, 측정된 메모리 절약, 파이프라인, 무한 시퀀스, 항복, 전송 및 공통 트랩.

기사 읽기 →
인공지능

임베딩이란 무엇입니까? 벡터와 코사인 유사성을 간단하게 설명

임베딩이란 무엇입니까? 벡터, 코사인 유사성 및 의미론적 검색에 대한 일반 언어 가이드로, 우리가 실행한 작은 예, 일반적인 용도, 모델 선택 및 알려진 한계를 제공합니다.

기사 읽기 →
DevOps

블루-그린 배포와 카나리아 배포: 차이점, 장단점 및 선택 방법

블루-그린 배포와 카나리아 배포에 대한 설명: 각각의 작동 방식, 비용, 위험 및 롤백, 테스트한 안정적인 사용자 버킷팅, 데이터베이스 마이그레이션, 롤링 업데이트 및 선택 방법.

기사 읽기 →
테스트 자동화

불안정한 테스트: 원인과 해결 방법

우리가 실행한 데모를 통해 불안정한 테스트에 대해 설명했습니다. 주요 원인, 확인 및 진단 방법, 시기, 공유 상태 및 날짜, 격리 프로세스에 대한 적절한 수정 사항.

기사 읽기 →
소프트웨어 테스트

부하 테스트와 스트레스 테스트 비교: 차이점, 측정항목 및 k6 예

부하 테스트와 스트레스 테스트 비교 설명: 각각의 증명, 스파이크 및 흡수 테스트, 중요한 측정항목, 평균이 잘못된 이유, k6 예 및 테스트 계획 방법.

기사 읽기 →
소프트웨어 테스트

테스트 케이스와 테스트 시나리오: 주요 차이점, 예 및 각각의 사용 시기

테스트 케이스와 테스트 시나리오 설명: 명확한 정의, 병렬 테이블, 시나리오에서 케이스로 가져온 하나의 비밀번호 재설정 기능, 템플릿 및 각 사용 시기.

기사 읽기 →
데이터베이스 및 SQL

SQL 쿼리 최적화: 타이밍에 따라 실행 계획을 읽고 느린 쿼리를 수정합니다.

백만 개의 행에서 테스트된 SQL 쿼리 최적화: 실행 계획 읽기, 올바른 인덱스 추가, 분할할 수 없는 필터 수정, 복합 인덱스 및 키 세트 페이지 매김 사용.

기사 읽기 →
데이터베이스 및 SQL

SQL UNION 대 UNION ALL: 테스트된 차이점, 예 및 성능

SQL UNION과 UNION ALL은 우리가 실행한 쿼리(중복, 둘 다 따르는 규칙, 실제 데이터 버그, 측정된 성능, INTERSECT 및 EXCEPT, 각각의 사용 시기)를 설명합니다.

기사 읽기 →
소프트웨어 개발

JavaScript Fetch API 튜토리얼: GET, POST, 오류 처리 및 시간 초과

로컬 서버에 대해 테스트된 JavaScript Fetch API 튜토리얼: GET 및 POST, 404가 발생하지 않는 이유, 재사용 가능한 도우미, 쿼리 문자열, 시간 초과, CORS 및 일반적인 실수.

기사 읽기 →
소프트웨어 개발

Python 파일 처리: 읽기, 쓰기, CSV, JSON 및 pathlib 예제 포함

우리가 실행한 코드로 설명된 Python 파일 처리: 개방형 모드, 대용량 파일 읽기, CSV, JSON, pathlib, 바이너리 파일, 안전한 쓰기, 오류 처리 및 일반적인 실수.

기사 읽기 →
소프트웨어 개발

Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼

우리가 실행한 코드로 설명된 Python 클래스와 객체: __init__, 메소드, 클래스 대 인스턴스 속성, 상속, 속성, 던더 메소드, 데이터 클래스 및 일반적인 실수.

기사 읽기 →
인공지능

대규모 언어 모델이란 무엇입니까? LLM의 작동 방식, 과대광고 없이 설명

대규모 언어 모델이란 무엇입니까? LLM은 토큰, 임베딩, 주의, 훈련, 온도 및 컨텍스트 창, 작은 다음 단어 데모 및 실제 한계 등 일반 언어로 설명됩니다.

기사 읽기 →
DevOps

초보자를 위한 Linux 명령: 예제가 포함된 필수 터미널 가이드

탐색, 파일, 로그 보기, grep, 파이프, 권한, 프로세스 및 아카이브 등 작업별로 그룹화된 초보자를 위한 Linux 명령과 실용적인 로그 분석 예제가 포함되어 있습니다.

기사 읽기 →
테스트 자동화

셀레늄 대 극작가: 주요 차이점, 코드 비교 및 선택할 항목

Selenium과 Playwright 비교: 아키텍처, 대기, 브라우저 및 언어 지원, 디버깅, 두 도구 모두에서 동일한 테스트, 마이그레이션 조언 및 선택 방법.

기사 읽기 →
소프트웨어 테스트

등가 분할: 실제 예제를 통해 설명되는 테스트 설계 기법

등가 분할 설명: 유효한 파티션과 유효하지 않은 파티션을 찾는 방법, 연령, 비밀번호 및 쿠폰에 대한 작업 예제, 실행한 테스트, 경계와 쌍을 이루는 이유.

기사 읽기 →
소프트웨어 테스트

소프트웨어 테스팅의 심각도와 우선순위: 차이점, 매트릭스 및 실제 사례

소프트웨어 테스팅의 심각도와 우선순위에 대한 설명: 명확한 정의, 예제가 포함된 4방향 매트릭스, 수준 척도, 각 항목을 설정하는 사람 및 버그 분류 실행 방법.

기사 읽기 →
데이터베이스 및 SQL

SQL 하위 쿼리 자습서: 유형, 상관 하위 쿼리 및 EXISTS(예제 포함)

스칼라, IN, FROM 및 SELECT 하위 쿼리, 상관 하위 쿼리, EXISTS, NOT IN NULL 트랩 및 하위 쿼리 대 JOIN 대 CTE 등 우리가 실행한 쿼리가 포함된 SQL 하위 쿼리 자습서입니다.

기사 읽기 →
데이터베이스 및 SQL

SQL 트랜잭션 및 ACID 설명: COMMIT, ROLLBACK 및 격리 수준

COMMIT, ROLLBACK, 저장점, 잠금, 격리 수준, 더티 읽기, 교착 상태 및 모범 사례 등 우리가 실행한 은행 이체를 통해 SQL 트랜잭션 및 ACID를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Git merge vs rebase: 차이점, 예제, 언제 무엇을 쓸까

Git merge vs rebase를 실제 로그 출력, 비교표, rebase의 황금률, 안전한 팀 워크플로로 설명합니다.

기사 읽기 →
소프트웨어 개발

파이썬 리스트 컴프리헨션: 문법, 예제, 피해야 할 때

파이썬 리스트 컴프리헨션 설명: 문법, 필터링, if-else, 중첩 반복문, 실제 측정 시간, 그리고 일반 for 반복문이 더 나은 경우.

기사 읽기 →
데이터베이스 및 SQL

예제로 쉽게 배우는 SQL JOIN (Inner, Left, Right, Full)

샘플 테이블과 쿼리로 SQL JOIN을 단계별로 이해하세요. INNER, LEFT, RIGHT, FULL, CROSS, SELF와 흔한 실수, 성능 팁까지 정리했습니다.

기사 읽기 →