TECH RAFA
/
Computer Science
Search
Share
Computer Science
Gallery
List
Search
All Posts
오늘은 메모리 구조에 대해 비전공자도 이해할 수 있게 정리하고자 합니다! 바로 가보시죠.
메모리 구조의 이해
먼저, 메모리에 대해서 알고 계신가요? 메모리는 사람의 뇌처럼 어떠한 정보를 저장하고 관리하는 곳이죠. 메모리의 구조로 4 종류가 있어요.
코드(Code) - 데이터(Data) - 힙(Heap) - 스택(Stack)
으로 구성되어 있죠. 먼저, 코드 영역부터 보겠습니다.
코드 영역
코드 영역은 컴퓨터가 실행할 코드를 저장하는 곳이에요. 이를 쉽게 이해하려면 여러 레시피들을 모아둔 레시피 책과 같아요. 코드는 레시피가 되겠죠. 레시피 책에는 다양한 요리법이 적혀 있듯이 코드 영역에는 프로그램이 실행할 작업들이 명령어로 적혀 있어요.
프로그램이 실행될 때 컴퓨터는 이 코드 영역에 있는 명령어들을 차례로 읽고 실행해요. 여기서 중요한 것은 이 명령어들이 얼마나 효율적으로 작성되었느냐예요. 효율적인 명령어란, 컴퓨터가 더 적은 자원(시간, 메모리 등)을 사용하여 더 빠르고 정확하게 작업을 할 수 있는 코드를 말해요.
이 과정에서 컴파일러의 역할도 중요하죠. 컴파일러는 프로그래머가 작성한 코드를 컴퓨터가 이해할 수 있는 기계어 코드로 변환해요. 이 과정에서 컴파일러는 코드를 최적화하여 프로그램이 더 효율적으로 실행될 수 있도록 도와줘요.
요약하자면, 코드 영역은 프로그램이 실행될 때 필요한 명령어들이 저장되는 곳으로 이 명령어들의 효율성과 컴파일러의 최적화 작업이 프로그램의 실행 속도와 성능에 중요한 영향을 미친답니다.
데이터 영역
데이터 영역은 전역 및 정적 변수를 안정적으로 저장하고 관리하는 영역이에요. 예를 들어, 프로그램을 전기를 공급하는 콘센트로 비유를 하자면 전역 변수와 정적 변수는 전기를 공급 받는 물체가 될 수 있겠죠. 전기를 공급 받는 동시에 작동하고 전기가 끊기면 그들은 작동하지 않죠. 즉, 데이터 영역은 프로그램을 실행하는 동시에 각각의 변수들이 메모리에 할당되고 종료되면 함께 소멸됩니다.
힙 영역
힙 영역은 프로그램이 실행되는 동안 메모리를 동적으로 할당하는 영역이에요. **'동적 할당'**이란, 프로그램이 실행되는 도중에 필요한 메모리의 양을 결정하고 할당하는 것을 의미해요. 이는 프로그램이 컴파일될 때 메모리의 크기가 결정되는 스택 영역과는 대비되죠?
예를 들어볼게요. 사용자가 입력한 데이터의 크기에 따라 메모리가 필요할 경우나 프로그램이 실행되는 동안 생성되는 데이터가 불규칙적이거나 크기를 예측하기 어려운 경우 힙 영역이 사용돼요. 즉, 사용자가 몇 개의 데이터를 입력할지 모르는 상황에서는 힙 영역에 메모리를 할당하여 그 데이터를 저장할 수 있어요.
또한, 힙 영역은 관리가 중요해요. 메모리가 더 이상 필요하지 않게 되었을 때 적절하게 해제하지 않으면 메모리 누수가 발생할 수 있어요. 이는 원자력 발전소에서 안전 관리가 중요하듯 프로그램에서도 메모리 관리가 매우 중요하다는 것을 의미해요.
메모리 구조
Swift는 Apple에서 개발한 현대적이고 강력한 프로그래밍 언어로,
객체지향프로그래밍
패러다임을 완벽하게 지원합니다.
객체지향프로그래밍(Object-Oriented Programming)
객체지향프로그래밍은 프로그램을 독립된 단위인 객체(Object)들로 나누고 이 객체들의 상호작용을 통해 프로그램을 설계하고 구현하는 패러다임입니다. 각 객체는 속성과 메서드를 가지며 클래스라는 틀을 사용하여 객체를 생성합니다.
객체지향프로그래밍의 장점
•
모듈성과 재사용성
- 객체는 독립적이고 재사용 가능한 단위로 구성되므로 코드를 모듈화 하고 재사용하기 용이합니다. 이로써 코드의 유지보수가 편리해지며 생산성을 높일 수 있습니다.
•
유지보수 용이성
- 코드의 변경이나 구현에 대한 영향을 최소화할 수 있습니다.
객체지향프로그래밍의 단점
•
복잡성
- 객체지향프로그래밍은 강력한 도구지만 복잡한 클래스 계층 구조나 다양한 객체 간의 관계를 다루는 것은 어려울 수 있습니다. 잘못된 설계나 사용 시 의도하지 않은 문제가 발생할 수 있습니다.
•
용량
- 객체지향프로그래밍은 클래스와 객체를 사용하므로 코드의 구조가 복잡해질 수 있습니다. 클래스 정의, 객체 생성 및 관리를 위한 코드 등이 추가되므로 컴파일된 바이너리 파일의 크기가 증가할 수 있습니다. 더 많은 메모리 공간이 필요하게 되며 이는 앱의 다운로드 크기나 메모리 사용량 측면에서 고려해야 할 요소가 될 수 있습니다.
•
실행속도
- 객체지향프로그래밍은 객체 간의 상호작용과 메서드 호출 등의 오버헤드를 동반합니다. 이로 인해 프로그램의 실행 속도가 조금 느릴 수 있습니다. 예를 들어, 객체의 생성과 소멸, 메서드 호출 등은 함수 호출보다 약간의 추가 작업이 필요하므로 작은 규모의 작업에서는 큰 문제가 되지 않을 수 있으나 대규모의 반복적인 작업에서는 성능 저하를 불러올 수 있습니다.
객체지향프로그래밍 특징
객체지향프로그래밍은
캡슐화
,
상속
,
추상화
,
다형성
이라는 4가지 특징을 가집니다.
1. 캡슐화(Encapsulation)
캡슐화는 변수와 함수를 하나의 단위로 묶는 것을 뜻합니다. 이렇게 하면 데이터에 직접 접근하는 것을 제어하고 데이터의 변경이나 조작이 오로지 해당 객체의 메서드를 통해서만 이루어지도록 합니다. 이로써 외부에서의 무작위 접근을 방지하고 안정성을 높일 수 있습니다.
Object-Oriented Programming(OOP)