CS 16

절차지향 프로그래밍 POP

절차지향 프로그래밍은 순차, 순서대로 진행 되는 프로그램을 설계하는 방식으로프로그램이 데이터를 처리하는 순서를 중요시 여기며, 위에서 아래로 실행되는 구조를 의미한다. 장점 구조 파악코드가 절차적으로 실행되므로 로직이 직관적이고 전체 로직의 가독성이 좋음코드 흐름이 명확해 디버깅, 테스트가 쉬움 적은 메모리 활용프로그램이 함수 중심으로 실행되기에 불필요한 메모리 소비가 적다 함수사용의 재사용성자주 사용되는 기능을 함수로 만들어 여러곳에서 재사용이 가능  단점 유지보수성프로그램의 규모가 커질수록 함수 간 관계가 복잡해지며 이는 유지보수성 저하와 관련되어있음변경 사항이 있을 경우 관련된 모든 함수에 영향이 있을 수 있음 제한적인 재사용성POP 의 경우 함수의 재사용만 가능하며 OOP 와 같은 상속을 통한 코..

CS 2025.02.13

객체지향 프로그래밍 OOP

객체지향 프로그래밍은 객체 라는 개념을 중심으로 설계 및 구현하는 프로그래밍 패러다임이다프로그램을 데이터와 동작을 가진 객체로 구성하며, 이 객체들간 상호작용으로 프로그램이 동작하는 방식으로 개발이 진행된다. 객체지향은 절차지향의 단점의 재사용성, 유지보수, 확장성을 개선하며협업에 용이한 소프트웨어 개발을 위해 도입된 개발 방식이다.  장점 재사용성의 증가이는 객체지향의 특징 상속성으로기존 클래스를 재사용해 새로운 파생 클래스를 제작할 수 있다.이는 부모클래스, 자식클래스로 나뉠 수 있으며 상속이라는 개념을 통해 제작된 클래스는제작될 때부터 이미 부모에 대한 데이터, 기능을 모두 갖게된다. 유지보수성 향상객체단위로 구성되므로 특정 기능을 수정해도 다른 부분의 영향이 최소화 될 수 있다.수정해야 할 부분이..

CS 2025.02.13

실행 플랫폼 별 생성되는 기계어 코드가 다른 이유

컴파일러는 실행할 플랫폼에 맞는 기계어 코드를 생성해야한다.하지만 운영체제와 CPU 아키텍처마다 명령어 세트, 실행 방식이 다르기에 동일한 소스코드라도 각 플랫폼에 맞게 다르게 변환된다. 주요 원인1. CPU 아키텍처의 차이 - CPU 마다 지원하는 명령어 세트가 다름 대표적 아키텍쳐 종류x86 = 데스크톱, 서버에서 사용ARM = 스마트폰, 임베디드 시스템 같은 코드라도 x86 과 ARM 에서 실행되는 코드가 다르게 컴파일 됨int Add(int a, int b){ return a + b; }====== x86 ======mov eax, edi ; // a 값을 eax 레지스터에 저장add eax, esi ; // b 값을 더함ret ; // 함수 반환====== ARM64 ..

CS 2025.02.10

컴파일러 Compiler

컴파일러는 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환하는 프로그램이다.평소에 작성하는 코드는 사람이 이해하기 쉬운 고수준 언어이지만 컴퓨터는 기계어 0과 1로 된 코드만 이해할 수 있다.컴파일러는 이 둘을 연결해주는 역할을 하며, 소스 코드를 실행 가능한 프로그램으로 변환해준다. 컴파일러의 주요 역할1. 코드 변환 : 프로그래머가 작성한 코드를 컴퓨터가 실행할 수 있는 기계어로 변환2. 코드 최적화 : 성능 향상을 위해 중복 코드 제거, 실행 속도 개선, 메모리 최적화 등을 수행3. 오류 감지 : 코드에 문법 오류, 의미 오류가 있는지 검사 컴파일러 동작 과정1. 전처리 Preprocessing컴파일 전 코드에서 #include, #define 같은 전처리기 지시문을 처리하는 단계로이 과정에서는..

CS 2025.02.10

DI & DIP 의존성주입과 의존관계 역전원칙

의존성 주입이란 메인 모듈이 직접 다른 하위 모듈을 참조하지 않고 중간 매개체를 통해모듈 간 간접적인 의존성을 주입하는 방식이다.  이미지 출처 https://velog.io/@tiger/CS-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85 의존성 주입 전 이미지의 경우 메인 모듈이 하위 모듈을 직접 참조하고 있으며의존성 주입 후 이미지의 경우 메인 모듈이 모든 하위 모듈을 직접 참조하지 않고 중간 주입자를 통해상호작용을 진행하는 구조이다. 의존한다 의 의미A 가 B 에 의존한다 => B 가 변하면 A 에 영향을 끼친다public class A{ private B _b; pu..

CS 2024.12.11

String 문자열의 불변성

문자열은 값형식이 아닌 참조형식으로 heap 메모리에 실제 값을 저장한다. string str1 = "안녕하세요";string str2 = str1; str2 에 str1 의 참조주소를 할당하였고str2 또한 str1의 "안녕하세요"라는 데이터를 가리키게 된다.   이때 만약 str1의 문자를 변경하면 어떻게 될까string str1 = “안녕하세요”;string str2 = str1;str1 = "abc"; 일반 참조타입과 다른방식으로 작동하게 된다.일반적인 참조타입의 경우 가변객체의 특성으로 heap 영역의 데이터가 변경되어도참조는 그대로 유지하며 데이터만 변경된다. 하지만 위의 그림과 같이 문자열은 heap 영역의 데이터를 변경하는 경우다시 새로운 메모리를 할당하게 된다. 이러한 성질을 불변성이라 ..

CS 2024.09.02

2의 보수

이전글 컴퓨터의 사칙연산 (보수법의 필요성)컴퓨터는 compute 계산을 해주는 기계라고 설명했다.대표적인 계산이라 하면 사칙연산인 덧셈, 뺄셈, 곱셈, 나눗셈이 있다. 허나 컴퓨터는 연산의 효율성과 설계의 단순화를 위해모든 연산을 덧kark.tistory.com 보수법을 통해 뺄셈 연산 시 보수를 얻는 과정을 알게 되었다. 그럼 이제 컴퓨터가 사용하는 이진수의 보수법을 알아보자.① 모든 수를 뒤집는다. (1의 보수법)② +1 해준다. (2의 보수법) 위처럼 간단하다. -3 의 경우0011 => 1100 => 1101 로 2의 보수를 통해 표현할수 있다. 좀 더 궁금했던 부분이1의 보수 과정에서 끝나는게 아니며 +1의 과정이 필요하지?왜 2의 보수를 사용해야하는거지?라는 의문점이 생겼다. 정답은 0 값 ..

CS 2024.07.14

컴퓨터의 사칙연산 (보수법의 필요성)

컴퓨터는 compute 계산을 해주는 기계라고 설명했다.대표적인 계산이라 하면 사칙연산인 덧셈, 뺄셈, 곱셈, 나눗셈이 있다. 허나 컴퓨터는 연산의 효율성과 설계의 단순화를 위해모든 연산을 덧셈으로 처리한다. 덧셈은 그냥 그대로 이진수 덧셈을 진행하면 쉽게 결과를 얻을 수 있다. 곱셈은 그저 덧셈을 여러번 진행한것과 같다. 그렇다면 뺄셈은 덧셈으로 어떻게 빼기를 하게 될까 (나눗셈의 경우 빼기를 여러번 진행..) 인간의 10진법의 개념으로 앞 수의 빌리는 과정을 필요로 하게 되면 연산 속도와 효율성이 많이 떨어지게된다.이진수 11 - 6 = 5 의 연산과정을 만약 빌림과정을 통해 연산하게 되는경우 다음 그림처럼 진행될것이다.  그렇기에 보수법이라는 개념을 반영하게 된다.' 보수란 특정 수를 만들어 주기위..

CS 2024.07.14

고정 소수점, 부동 소수점

현재 잘못된내용 현재 잘못된내용 현재 잘못된내용 현재 잘못된내용 현재 잘못된내용  컴퓨터에서는 소수점이 있는 숫자를 표현하는데 두가지 방법이 있다.각각의 방법은 데이터의 범위, 정밀도, 연산 속도 측면에서 다른 특성을 갖고 있으므로개념을 이해하고 적합한 방법을 선택하는것이 좋은 선택이 될 수 있다. 고정 소수점 고정 소수점 표현은 소수점이 말그대로 고정되어 있음을 의미한다.정수부분, 소수 부분의 비율이 미리 정해져 있어 소수점의 위치가 고정되는 것이 특징이다. 예를 들어 고정소수점이 32bit 고정 소수점에서는0 0000000 00000000 00000000 00000000 0 = 부호비트로 0이면 양수 1이면 음수를 의미한다.0 = 빨간비트영역은 정수부분을 의미한다. (15bit)0 = 파란부분은 소..

CS 2024.07.09

16진수 표기는 어디에 사용될까

2진수를 거의 16진수로 바꿔서 표기한다고 했다.그럼 어디에서 16진수가 사용될까?  1. 색상표현모니터에 나타나는 빛의 3원색 그림이다.각 R,G,B를 보면 0부터 255까지 수치 입력이 가능한것 같다.10진수의 값을 256가지 대입해볼수 있다는 내용이다. 255의 값을 이진수로 변환해보면 1111 1111의 값이 나온다.그렇다는것은 각 색상별로 8bit로 구분되어 있다는 얘기다.이를 16진수로 변환해보면 빨강색상은 FF 00 00 의 값이 된다. 아래의 색상표에서 해당 16진수값을 대입해주면 순수 빨간색상이 표기된다. 2. 메모리 표현  왼쪽은 메모리주소는 16진수를 표현하고, 오른쪽은 각 메모리 주소의 데이터를 16 진수로 표기된상태이다.

CS 2024.07.01