목록프로그래밍 강의/코드잇-컴퓨터개론 (9)
컴굥일지
1. 플랫폼 - 프로그램이 실행되는 하드웨어, 소프트웨어 환경 - 각 플랫폼에 맞게 프로그램을 만들어야 한다. 종류가 맞지 않으면 실행이 되지 않는다. ex) 프로그램 설치 시 윈도우 용/Mac 용으로 나누어져 있음. CPU마다 머신 코드의 문법이 다름. - 프로그램이 실행될 때 플랫폼에 영향을 받게 된다. => 플랫폼 의존성 Platform dependency - 그렇기 때문에 플랫폼의 종류가 많아질수록 다양한 버전의 프로그램을 만들어야 한다. => 플랫폼 파편화 => 매우 번거롭기 때문에 크로스 플랫폼이 등장함. 2. 크로스 플랫폼 - 여러 OS, CPU 등에서 동일하게 실행할 수 있는 환경을 의미한다. - 다양한 컴퓨터 위에 가상의 컴퓨터를 두어, 동일한 프로그램이 돌아가는 것처럼 느껴지게 하는 것..
1. 운영체제 ex) Windows 10, Mac OS, Linux / Android, iOS 등 - 애플리케이션과 하드웨어가 잘 작동하도록 도와주는 역할이다. - 컴퓨터나 휴대폰을 켜면 자동으로 운영체제가 실행된다. - 운영체제를 용도로 나누어보면 크게 "데스크톱/랩톱", "모바일", "서버", "임베디드"로 나눌 수 있다. 1) 입력과 출력 - 입력(키보드, 마우스,마이크,카메라)된 것을 제대로 출력(모니터, 스피커) 하기 위해 운영체제가 필요하다. 입출력 기기들의 종류는 매우 다양하고 연결 방식도 다양하기 때문에, 애플리케이션을 만드는 사람들이 이 장치들을 모두 고려하기는 매우 어렵다. 그렇기 때문에 중간에 운영체제가 여러 가지 제조사, 연결 방식 등을 고려하여 정리한 다음에 신호를 애플리케이션에 ..
1. 컴파일러와 인터프리터 - High-level 프로그래밍 언어로 작성된 코드를 기계가 이해할 수 있게 기계어로 바꾸어주는 소프트웨어이다. - 프로그래밍 코드를 실제로 동작하는 프로그램, 즉 애플리케이션으로 바꿔준다. 1) 컴파일러 - 프로그램 전체를 한 번에 번역한 후, 완성된 머신 코드를 내놓는다. - 컴파일러가 변환한 머신코드를 사용자에게 보내주면, 사용자는 기계어를 실행해서 프로그램을 작동시킨다. => 머신코드가 고수준 언어보다 길이가 길기 때문에 파일의 크기가 커진다. - 기계어는 사람이 이해할 수 없기 때문에, 기계어 중에서 원하는 부분만 수정할 수 없다. => High-level로 작성된 코드에서 수정을 한 뒤에 다시 컴파일을 시켜야 하는 단점이 있다. 즉, 개발자 입장에서 빠르게 개발할 ..
1. 소프트웨어 공학 - 소프트웨어로 제품 또는 서비스를 만드는 방법에 대한 학문 - 어떤 제품/서비스를 기획, 개발, 테스트, 출시, 배포, 유지/보수하는 프로세스를 포함한다. - 제품/서비스를 개발하기 위해서는 다양한 분야의 사람들이 협업을 해야 하는데 이때 사용되는 협업 방식으로 폭포수 방식과 애자일 방식이 있다. 2. 폭포수 방식 VS 애자일 방식 1) 폭포수(Waterfall) 방식 - 각 단계를 완료하고 다음 단계로 넘어가는 방식으로, 예전부터 사용되는 고전적인 방식이다. - 단순하고 직관적이지만, 복잡한 프로젝트의 경우 각 단계를 한번에 완벽히 끝내기가 어렵다는 단점이 있다. - 수정 사항이 많이 생길 가능성이 높은데, 개발자들이 수정 사항을 반영하기 힘들 수도 있다. - 각 단계가 복잡하지..
1. 라이브러리 - 자주 쓰일법한 코드를 모아둔 것으로, 내가 필요한 코드를 가져와서 내 코드에 붙이는 방식이다. - 모든 언어에 동일한 기능을 하는 라이브러리가 있는 것이 아니다. 언어마다 맞는 라이브러리가 존재한다. => 언어를 선택하는 기준이 되기도 한다. 2. 프레임워크 - 프로그래밍의 뼈대가 이미 준비되어 있고, 일부 비어있는 곳만 내가 채우면 되는 방식이다. - 적은 양의 코드로 프로그램을 만들 수 있게 해 준다는 점에서 라이브러리와 유사하다. - 큰 틀이 정해져 있고, 세부 내용만 바뀌는 프로그램에 사용하기 좋다. - 내가 미처 생각하지 못한 부분(ex 보안, 암호화 등)에 대한 코드가 이미 포함되어 있다. - 이미 구조가 만들어져 있기 때문에, 큰 틀을 바꾸는 것은 어렵다.
자세한 언어 => 체계적인 언어 => 쉬운 언어 1. 자세한 언어 - 컴퓨터와 칩의 성능이 좋지 않던 시기에 발전한 언어로, Low-level에 가까운 어셈블리 언어와 C언어 등이 있다. - 아직 객체 지향의 개념이 나타나지 않았으며, 코드 작성 시 컴퓨터적 구조를 모두 고려해주어야 한다. - 컴퓨터가 이해하기 쉽게 작성해야 하기 때문에 사람이 작성하기는 어렵지만, 컴퓨터가 실행하기에 쉽다 - 프로그램의 실행 속도가 빠르고, 대체적으로 객체 지향 언어보다 저장 공간의 낭비가 적어 => 실시간이 보장되어야하는 서비스와 임베디드 시스템 등 처리 속도와 알고리즘이 중요한 분야에 주로 사용된다. 2. 체계적인 언어 - 협업과 생산성을 위해 객체 지향 개념을 도입한 언어로 JAVA, C++ 등이 있다. - 여러 ..
1. 프로그래밍 언어의 분류 기준 1) 객체 지향인가? 2) 코드에 자료형을 명시하는가? (Dynamic typing/Static typing) 3) 컴퓨터와 가까운가 인간과 가까운가? (Low-level/High-level) 2. Low-level VS High-level 1) Low-level - 컴퓨터와 가까운 언어, 추상화가 적게 되어있다. (추상화 : 몰라도 되는 내용은 숨기고, 꼭 알아야 할 내용만 드러내는 것) - 컴퓨터가 사용하는 언어는 Machine Language이다. - 자료형을 명시하는 C, JAVA 등은 Python, Ruby보다 컴퓨터와 가깝다. (컴퓨터가 이해하기 더 쉬우니까) - 기계어, 어셈블리 언어, C 등이 있다. 2) High-level - 인간과 가까운 언어, 추상화..
1. Dynamic typing - 변수의 자료형을 정해주지 않는 언어들을 Dynamic typing 언어라고 부른다. 변수의 자료형은 코드가 실행될 때 정해진다. - 간결하고 편리한 것이 특징이기 때문에, 컴퓨터적 구조가 생략되는 경우가 많다. => 코딩 속도가 빠르지만 실행 속도가 느리다. - 문법이 간결하고 코드에 어려운 표현이 적기 때문에 코드 내용과 로직을 파악하기가 쉬우며 배우기 쉽다. => 혼자서 빠르게 하는, 작고 단순한 프로젝트에 적합하다. (실행 속도가 민감하지 않은 프로젝트에 적합) -Python, Ruby, Javascript, PHP, Perl 등이 있다. 2. Static typing - 변수의 자료형을 정해주는 언어들을 Static typing 언어라고 부른다. 변수의 자료형을..
1. 객체 지향 프로그래밍 - JAVA, C++, C#, Python, Ruby 등의 언어가 있다. 1) 장점 -전체를 부분 부분으로 나누어 코딩하기 때문에, 수정 사항이 발생하더라도 관련된 객체만 고치면 된다. -전체를 완성할 필요 없이, 일부만으로도 기능을 테스트할 수 있다. -의미를 이해하기 쉬우며, 한 번 만들어둔 객체는 재사용하기가 쉽다. => 규모가 큰 프로젝트나 다량의 데이터를 다루는 프로그램에서 객체지향을 사용하면 좋다. 2) 단점 - 코드 작성 이전에 설계가 필요하며, 설계하는 것이 어렵다. - 사람이 이해하고 작성하기 편한 방식으로 코딩이 되어 있어, 컴퓨터의 처리 속도가 느려지거나 저장 공간 사용이 늘어나기도 한다. => 속도가 빨라야 하거나 저장 공간이 크지 않은 장치들(ex 냉장고..