CS 111

테스트 기법 [블랙박스, 화이트박스 테스트]

화이트 박스 테스트 (White Box Test) 화이트 박스 테스트는 모듈의 원시 코드를 오픈시킨 상태에서 코드의 논리적 모든 경로를 테스트하는 방법이다.소스 코드의 모든 문장을 한 번 이상 수행하여 모듈 안의 작동을 직접 관찰할 수 있다.산출물의 기능별로 적절한 프로그램의 제어 구조에 따라 선택, 반복 등의 부분들을 수행함으로써 적절한 논리적 경로를 점검한다.테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트(Dynamic Test)에 해당한다.개발자가 소프트웨어 또는 컴포넌트 등의 로직에 대한 테스트를 수행하기 위해 설계 단계에서 요구된 사항을 확인하는 개발자 관점의 단위 테스팅 기법이다.화이트 박스 테스트 기법기초 경로 검사(Basic Path Testing) : 대표적인..

CS 2026.05.11

객체지향 설계의 5가지 기본원칙 S.O.L.I.D

SOLID 원칙SOLID 원칙은 객체지향 설계에서 지켜야 할 5가지 소프트웨어 설계 원칙을 의미한다.각 원칙의 앞 글자를 따서 SOLID라고 부르며 다음과 같은 원칙으로 구성된다.SRP(Single Responsibility Principle)OCP(Open Closed Principle)LSP(Liskov Substitution Principle)ISP(Interface Segregation Principle)DIP(Dependency Inversion Principle)이 원칙들은 코드의 유지보수성, 재사용성, 확장성을 높이고 결합도를 낮추고 응집도를 높이는 방향으로 설계를 유도한다.SRP (Single Responsibility Principle)단일 책임 원칙하나의 클래스는 하나의 책임만 가져야 ..

객체지향 프로그래밍과 절차지향 프로그래밍의 차이점

객체지향 프로그래밍(Object-Oriented Programming)개념객체지향 프로그래밍(OOP)은 프로그램을 객체의 집합으로 구성하고, 이들 객체 간의 상호작용을 통해 문제를 해결하는 프로그래밍 방법론이다.각각의 객체는 데이터(속성)와 그 데이터를 처리하는 메서드(동작)를 함께 묶어 관리한다. 특징1. 클래스와 객체클래스는 객체를 생성하기 위한 설계도이며, 객체는 클래스에 의해 생성된 인스턴스(instance)이다.2. 추상화 (Abstraction)객체의 중요한 속성과 동작만을 모델링하고 불필요한 세부 사항은 숨기는 것을 의미한다.3. 캡슐화 (Encapsulation)데이터와 메서드를 하나의 객체로 묶고, 접근 제한자를 통해 외부에서 직접 접근하지 못하도록 보호하는 것이다.4. 상속 (Inher..

객체지향 프로그래밍(OOP)의 장단점

객체지향 프로그래밍(OOP)의 장점1. 모듈화와 재사용성객체지향 프로그래밍에서는 프로그램을 여러 개의 객체 단위로 분리하여 설계할 수 있다.각 객체는 독립적인 역할을 수행하기 때문에 하나의 기능을 모듈처럼 사용할 수 있으며, 이미 작성된 클래스는 다른 프로그램이나 기능에서도 재사용할 수 있다.예를 들어 Character 클래스는 다양한 캐릭터를 생성하는 데 재사용할 수 있다.2. 유지보수성객체지향 프로그래밍은 캡슐화와 클래스 구조를 통해 코드의 변경 범위를 최소화할 수 있다.특정 기능을 수정해야 할 경우 해당 클래스 내부만 수정하면 되기 때문에 코드 관리가 비교적 쉽고 유지보수가 용이하다.3. 유연성과 확장성상속과 다형성을 활용하면 기존 코드를 크게 수정하지 않고도 새로운 기능을 확장할 수 있다.예를 들..

객체지향 프로그래밍(OOP)의 특징

객체지향 프로그래밍의 4가지 특징객체지향 프로그래밍에는 중요한 특징으로 추상화(Abstraction), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 총 4가지가 있다.추상화추상화는 객체의 중요한 속성과 동작만을 모델링하고 불필요한 세부 사항은 숨기는 것을 의미한다.즉, 복잡한 시스템을 단순화하여 핵심적인 개념만 표현하는 기법이다.객체지향 프로그래밍에서는 클래스를 통해 객체의 핵심적인 속성과 동작을 정의함으로써 이러한 추상화를 구현할 수 있다.예를 들어 자동차를 프로그램으로 표현할 때 내부 엔진 구조까지 구현하기보다는 다음과 같은 요소만 표현할 수 있다.더보기속도연료주행정지자동차를 표현하는 클래스가 있다고 가정했을 때, 엔진의 내부 구조나 복잡한 동작을..

객체지향 프로그래밍(Object-Oriented Programming)이란?

객체지향 프로그래밍이란?객체지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나로, 프로그램을 명령어의 단순한 나열이 아니라 여러 개의 독립적인 객체(Object)들의 상호작용으로 구성된 시스템으로 바라보는 방식이다.각 객체는 데이터와 동작을 함께 가지며, 메시지(메서드 호출)를 통해 서로 상호작용하며, 이러한 방식은 현실 세계의 개념이나 사물을 프로그램으로 모델링하는 데에도 자주 활용된다.객체지향 이전의 프로그래밍 패러다임비구조적 프로그래밍 (Unstructured Programming) 초기의 프로그램은 오늘날과 같은 명확한 구조를 가지지 않았다.프로그램은 단순히 위에서 아래로 순차적으로 실행되는 명령어의 나열 형태였으며,필요한 경우 go..

컴퓨터 구조론 8장 [고성능 컴퓨터시스템 구조 / 그래픽처리유니트(GPU)]

GPU는 실시간 그래픽 처리용으로 개발되었으나, 계산 능력이 강화되어 일반적인 산술 연산 처리에도 쉽게 이용할 수 있도록 개선되면서 다양한 데이터 병렬 응용(data parallel application)들을 위한 가장 이상적인 보조 프로세서로서의 입지를 굳혀가고 있다.초기 GPU는 몇 가지 치명적인 결점들을 가지고 있었다. 프로그래밍을 위해서는 GPU 내부 구조와 그래픽 API(application program interface)에 대한 지식이 필요하다는 것과 그래픽 프로그래밍 자체가 너무 복잡하다는 것이다.기억장치에 대한 직접적인 읽기 및 쓰기와 같은 기본적인 연산은 과학 기술 응용들에 필수적인 부동소수점 연산이 지원되지 않았고, 그러한 문제점에도 불구하고 GPU가 널리 보급되기 시작한 것은 NVI..

컴퓨터 구조론 8장 [고성능 컴퓨터시스템 구조 / 다중프로세서시스템 구조]

프로세서들이 기억장치 모듈을 사용하는(소유하는) 방식에 따라 크게 다음과 같이 분류공유-기억장치 시스템(shared-memory system)분산-기억장치 시스템(distributed-memory system)공유-기억장치 시스템 구조이 시스템 구조는 밀결합 형태로서, 주기억장치가 어느 한 프로세서에 속하지 않고 모든 프로세서들에 의해 공유된다.각 프로세서는 특수 프로그램(하드웨어 초기화와 진단 프로그램)을 저장하고 잇는 적은 용량의 지역 기억장치(local memory)를 별도로 가질 수는 있으나, 운영체제와 사용자 프로그램 및 데이터들은 모두 공유 기억장치에 저장된다.장점프로세서들이 공통으로 사용하는 데이터들이 공유 기억장치에 저장되므로, 별도의 프로세서 간 통신 메커니즘이 필요하지 않다.프로그램 실..

컴퓨터 구조론 8장 [고성능 컴퓨터시스템 구조 / 병렬컴퓨터의 분류]

Flynn의 분류컴퓨터 시스템을 분류하는 방법으로는 프로그램 처리의 동시성을 기준으로 하는 Flynn의 분류(Flynn's classification)가 널리 사용되고 있다.이 분류에서는 프로세서들이 처리하는 명령어와 데이터의 스트림의 수에 따라 디지털 컴퓨터를 네 가지로 분류하고 있다.여기서 스트림이란 하나의 프로세서에 의해 순서대로 처리되는 일련의 명령어들과 데이터들의 흐름을 말한다.명령어 스트림(instruction stream)실행되기 위하여 순서대로 프로세서로 들어오는 명령어 코드들의 흐름데이터 스트림(data stream)명령어 실행에 사용되기 위하여 순서대로 프로세서로 들어오는 데이터들의 흐름명령어 스트림과 데이터 스트림을 처리하기 위한 하드웨어 구조에 따른 Flynn의 분류단일 명령어 스트..

컴퓨터 구조론 8장 [고성능 컴퓨터시스템 구조 / 병렬처리의 개념 및 필요성, 병렬처리의 단위]

병렬처리의 개념 및 필요성반도체 소자의 물리적인 특성에 의한 프로세서 속도 상의 한계를 극복할 수 있게 해주는 기술이 병렬처리이다.병렬처리(parallel processing)다수의 프로세서들을 이용하여 여러 프로그램들을 분담하여 동시에 처리하는 기술실제로 대부분의 고성능 컴퓨터 시스템의 설계에서는 성능 향상을 위한 방법으로서 벼렬처리 기술이 널리 사용되고 있다.병렬 처리를 실제 구현하기 위해 만족해야 하는 조건많은 수의 프로세서들로 하나의 시스템을 구성할 수 있도록, 작고 저렴하며 고속인 프로세서들의 사용이 가능해야 한다.한 프로그램을 여러 개의 작은 부분들로 분할하는 것이 가능해야 하며, 분할된 부분들을 병렬로 처리한 결과가 전체 프로그램을 순차적으로 처리한 경우와 동일한 결과를 얻을 수 있어야 한다..