Skip to content

기초 S.W #15

@Sam1000won

Description

@Sam1000won

소프트웨어 기초

1. S.W 정의

  • 소프트웨어와 하드웨어: 함께 작동하는 프로그램 및 데이터의 집합
    • 하드웨어: 컴퓨터를 구성하는 기계 장치의 총칭
      • 본체: 중앙 처리 장치와 주 기억 장치로 구분
      • 주변 장치: 입력 장치, 출력 장치, 보조 기억 장치 등
    • 소프트웨어: 컴퓨터나 관련 장치들을 동작시키는 다양한 종류의 프로그램을 부르는 일반적인 용어
  • 컴퓨터 시스템의 기능 수행: 필요한 명령어와 데이터 구조 포함
    • 시스템 소프트웨어: 운영 체제 (OS), 예) Windows, Linux
    • 응용 소프트웨어: 특정 작업을 수행하기 위해 설계된 소프트웨어, 직접 사용자에게 서비스 제공

2. 프로그래밍 언어

  • 소프트웨어 개발에 사용되는 언어: 컴퓨터에게 명령을 전달하기 위해 사용
  • 프로그래밍 언어의 분류: 저급과 고급으로 나눔

저급 언어

  • 하드웨어와 가까운 언어
    • 기계어: CPU가 별다른 해석 없이 읽을 수 있는 프로그래밍 언어
    • 어셈블리어: 기계어의 숫자를 의미 있는 단어로 바꿔 사람이 이해하기 쉽게 만든 언어

고급 언어

  • 하드웨어 관련 지식 없이 프로그램 작성 가능, 생산성 수월
  • 일상적인 언어, 기호 등을 사용하여 기계어보다 인간의 언어와 가까움
  • 기억장소를 임의 기호에 저장 가능
  • 기계어로 변환하기 위해 인터프리터나 컴파일러가 필수 요구됨

프로그래밍 언어의 특성

  • 간결성 (Simplicity): 프로그램을 쉽게 이해하고 읽을 수 있도록 간결하게 표현
  • 직교성 (Orthogonality): 언어의 각 구성 요소가 상호 독립적이고 어떤 환경에서도 같은 요소로 사용
  • 가독성 (Readability): 누구나 쉽게 프로그램을 읽을 수 있는 특성
  • 정확성 (Preciseness): 엄밀하게 정의된 문법에 따라 작성된 프로그램은 정확성을 보장
  • 기계 독립성 (Machine Independence): 서로 다른 컴퓨터에서도 운영 가능해야 하며, 똑같은 결과 출력

컴파일러

  • 고급 언어를 기계어로 번역해주는 도구
  • 고급 언어로 작성된 프로그램을 기계어로 번역하여 CPU가 이해할 수 있도록 변환

컴파일과 빌드의 차이점

  • 컴파일: 소스 코드를 기계어로 번역하는 것
  • 빌드: 실행 가능한 파일로 만들어주는 것

3. 알고리즘

  • 문제를 해결하기 위한 단계적 절차나 방법
  • 특정 입력을 받아들여 결과를 생성하는 일련의 명령어
  • 알고리즘의 효율은 시간 복잡도와 공간 복잡도로 평가

복잡도

  • 알고리즘의 성능과 효율성을 나타내는 척도
  • 입력 값을 기준으로 연산에 사용되는 공간을 객관적으로 비교

시간 복잡도

  • 프로그램의 입력 값과 연산 수행 시간의 상관관계를 나타내는 척도
  • 복잡도는 아래로 내려갈수록 효율성이 떨어지며 상단에 있는 것일수록 효율이 올라감

공간 복잡도

  • 프로그램이 실행되고 소요하는 메모리 공간을 나타냄
  • 고정 공간: 코드가 저장되는 공간
  • 가변 공간: 문제 해결을 위해 알고리즘이 필요한 공간

4. 데이터 구조

  • 데이터를 저장하고 조작하는 방법을 정의
  • 문제 해결에 필요한 데이터를 구성하는 방식

1. 선형 자료구조

  • 배열: 동일한 데이터 타입을 연속적으로 저장
  • 리스트: 동적으로 크기가 변할 수 있는 데이터 집합
  • 스택: LIFO 방식으로 데이터를 저장
  • : FIFO 방식으로 데이터를 저장
  • Deque: 양쪽 끝에서 데이터를 추가/반환/삭제 방식으로 데이터를 저장

2. 비선형 자료구조

  • 트리: 계층적 구조로 데이터를 저장
    • DFS: 깊이 우선 탐색
    • BFS: 너비 우선 탐색
  • 그래프

5. 소프트웨어 개발 생명주기 (SDLC)

  • 소프트웨어의 계획, 개발, 테스트, 배포, 유지보수 등 단계적 접근 방식
    • 요구사항 분석: 사용자 요구사항을 수집하고 분석
    • 설계: 시스템 아키텍처와 데이터 구조 설계
    • 구현: 실제 코드를 작성하여 소프트웨어 개발
    • 테스트: 소프트웨어의 오류를 찾고 수정
    • 배포: 소프트웨어를 사용자에게 배포
    • 유지보수: 소프트웨어의 문제를 해결하고 업데이트

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions