https://www.w3resource.com/java-tutorial/java-class-methods-instance-variables.php

 

객체(Object)

 

실세계에 존재하는것

 

클래스로 생성된 변수(여러개 생성 가능)

 

 

클래스(Class)

 

설계도!

 

객체를 만들기 위한 틀!

 

객체의 특성이나 기능 설명

 

필드 + 메소드

 

 

필드(Field)

 

필드는 클래스의 상태 및 속성, 변수로 표현

 

 

인스턴스(Instance)

 

객체랑 같은 의미로 보면됨

 

인스턴스화 - 객체를 실제 메모리에 할당

 

 

메소드(Method)

 

객체의 기능

 

 

 

UML(Unified Modeling Language) 통합 모델링 언어

 

소프트웨어를 설계할 때 사용하는 표준화된 범용 모델링 언어를 말합니다.

 

객체 지향 소프트웨어 개발 방법론에 특화되어있어 객체지향 모델링 언어라고도 부릅니다.

 

https://ko.wikipedia.org/wiki/%ED%86%B5%ED%95%A9_%EB%AA%A8%EB%8D%B8%EB%A7%81_%EC%96%B8%EC%96%B4

즉, 소프트웨어를 시각화하며 문서화하는 언어죠.

 

건물에 비교하면 설계도라고 보시면 됩니다. 소프트웨어의 설계도

 

소프트웨어가 점점 무겁고 복잡해지면서 개발하기 전에 필수적인 작업이 되고있습니다.

 

다른 개발자가 UML을 통해 해당 소프트웨어를 쉽게 이해할 수 있습니다.

 

다만 UML은 모델링 언어고 개발방법론도 아니고 프로그래밍언어도 아닙니다.

 

구성요소

 

Things

 

Class, Usecase, Component, Node, State Machine..

 

Relationship

 

Dependency, Association, Generalization, Realization

 

Diagram

 

Things+ Relationships

 

 

 

다이어그램 (종류가 많지만 보통 9가지로 봅니다.)

 

 

클래스 다이어그램(Class Diagram)

https://medium.com/@smagid_allThings/uml-class-diagrams-tutorial-step-by-step-520fd83b300b

클래스와 관계 정의, 정적인 관점

 

시퀀스 다이어그램(Sequence Diagram)

https://en.wikipedia.org/wiki/Sequence_diagram

객체간의 동적 상호 작용 정의, 동적인 관점

 

유스 케이스 다이어그램(Usecase Diagram)

https://en.wikipedia.org/wiki/Use_case_diagram

사용자 관점에서 정의, 인수 테스트 기준

 

Collaboration Diagram(Communication, Interaction 다 같은 다이어그램)

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-uml-collaboration-diagram/

Sequence Diagram과 같으며 구조적인 측면을 좀 더 중시, 동적인 관점

 

상태 다이어그램(StateChart Diagram)

https://medium.com/@warren2lynch/state-diagram-comprehensive-guide-with-examples-e08b6d1c70fe

상태를 정의

 

액티비티 다이어그램(Activity Diagram)

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-activity-diagram/

일의 처리를 정의(프로세스 같은거), 동적인 관점

 

컴포넌트 다이어그램(Component Diagram)

https://creately.com/blog/diagrams/component-diagram-tutorial/

컴포넌트(시스템의 기능)의 구성 정의, 정적인 관점

 

배포 다이어그램(Deployment Diagram)

https://creately.com/blog/diagrams/deployment-diagram-tutorial/

컴퓨터를 기반으로 하는 시스템의 물리적 구조 정의

 

객체 다이어그램(Object Diagram)

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-object-diagram/

객체간의 관계 표현

 

 

 

복합 구조 다이어그램(Composite Structure Diagram), 패키지 다이어그램(Package Diagram) 

타이밍 다이어그램(Timing Diagram), 인터액션 오버뷰 다이어그램(Interation Overview Diagram)

통신 다이어그램(Communication Diagram), 교류 개요 다이어그램

 

이런 다이어그램도 있습니다.

 

 

 

 

 

 

객체지향 분석의 방법론

 

Booch(부치) 방법론 : 설계 중심 방법론, 미시적 개발, 거시적 개발 프로세스를 모두 사용하는 방법론

 

Jacobson(야콥슨) 방법론 : Usecase를 강조하여 사용하는 방법론, 큰 프로젝트에서 효율적

 

Rumbaugh(럼바우) 방법론 : 가장 일반적인 방법론, 객체 모델, 동적 모델, 기능 모델로 나누어 수행

 

Coad와 Yourdon 방법론 : E-R 다이어그램을 사용

 

Wirfs-Brock 방법론 : 고객 명세서 평가

 

https://www.geeksforgeeks.org/encapsulation-in-java/

캡슐화

 

이터와 데이터를 조작하는 연산을 하나로 묶는 것을 의미

 

다른말로 번들링(Bundling)이라고도 합니다.

 

인터페이스 간결, 추상화, 모듈화 향상, 내부 데이터의 보호, 모듈 독립성 향상의 효과가 있습니다.

 

기존에도 C언어에서 구조체나 공용체를 통해서 캡슐화를 시도했지만

 

객체지향 언어가 등장하면서 캡슐화가 완벽하게 지원됩니다.

 

 

추상화란?

 

복잡한 문제를 다루기 위해서 불필요한 부분들을 숨기고 중요한 부분만을 표현하는 것

 

또는 구체적인 사실들을 일반화시켜 기술한 것

 

공용체란?

 

구조체와 같이 여러 자료형을 멤버로 가지고 있지만

 

여러 멤버들이 메모리 공간을 공유하며 사용합니다.

 

가장 사이즈가 큰 멤버의 사이즈로 메모리를 할당하고 모든 멤버들이 해당 메모리 공간을 공유하며 사용합니다.

 

 

정보은닉

 

객체에 대한 구체적인 정보를 노출시키지 않도록하는 기법, 외부에서의 접근을 막는 기법

 

목적은 객체간의 결합도를 약화시켜 교체나 변경이 쉽도록 하는 것입니다.

 

객체지향 언어에서 추구하는 유연성(교체, 변경)을 정보은닉을 통해서 얻을 수 있습니다.

 

public : 외부에서 접근 가능

private : 외부에서 접근 불가

default : 동일 패키지로 묶인 클ㄹ스 내에서만 접근 가능

 

 

정리하자면 캡슐화는 데이터와 함수를 묶어주는 기법이고 정보은닉은 캡슐 속에 있는 데이터와 함수를

 

외부에 노출시키지 않는 기법입니다.

 

 

 

정보은닉, 캡슐화 추천 블로그

 

객체지향의 올바른 이해 : 5. 정보 은닉(information hiding)

우리가 어떻게 해서 유연성을 확보할 수 있었는가? 그것은 추상화(Abstraction)에서부터 시작되었다. 추상화를 통해 우리는 여러 요구사항들 중에서 공통점을 찾고, 이 공통점에서 목표한 것과 관련 없는 것들을..

effectiveprogramming.tistory.com

 

 

Information Hiding

소프트웨어 설계 시에 고려해야 할 기본 원리 중 가장 중요한 원리가 무엇이냐고 물어 본다면 주저 없이 ‘정보 은닉(Information Hiding)’이라고 대답할 것이다. 정보 은닉(또는 정보 은폐라고도 한다)은 1972년 Davis Parnas가 발표한 “On the Criteria To Be Used in Decomposing Systems Into

egloos.zum.com

 

https://www.codecademy.com/articles/cpp-compile-execute-locally

컴파일러란?

 

고급언어(C, CHILL, FORTRAN, COBOL)로 작성된 프로그램을 기계어(0,1)로 번역하는 것

 

즉 개발자가 고급언어로 프로그래밍 한 코드를 CPU가 이해할 수 있게 변환해주는 것이 컴파일러입니다.

 

컴파일과 빌드의 차이점은 무엇일까요?

 

컴파일은 단순히 소스를 기계어로 번역해주는 것이고

 

빌드는 실행 가능한 파일로 만들어주는 것입니다. 빌드 안에 컴파일이 포함된다고 생각하시면 됩니다.

 

 

절차

 

원시프로그램.c -> 프리프로세서(어휘, 구문, 의미 분석) -> 컴파일러(중간코드 생성)

-> 어셈블러(결과 : 목적프로그램.obj) -> 로더/링커 -> 실행파일

 

 

어셈블러(Assembler) : 어셈블리어용 번역기, 보통 컴파일러의 목적코드가 어셈블리어가 됩니다.

 

프리프로세서(preprocesser) : 고급언어를 또 다른 고급언어로 번역하는 고급언어 번역기

 

전처리기라고도 불림, 컴파일 전에 미리 처리한다고 생각하시면 됩니다. ex) #include, #define, #undef

 

링커(Linker) : 목적 파일들을 합쳐서 하나의 실행 파일을 만듦

 

로더(Loader) : 실행 파일을 읽고 메인 메모리에 내용을 올림

 

로더의 기능 - 할당(공간 확보), 연결(시작주소 호출), 재배치, 적재

 

인터프리터(Interpreter) : 문장 단위로 번역과 동시에 실행한 후 그 결과를 출력하는 번역기

 

목적 파일(Object File) : 모듈별로 개발되어 컴파일된 파일, 수행코드, 데이터, 저장 주소 존재

 

로더의 종류

 

1. Compile And Go 로더 : 별도의 로더 없이 

 

실행 시마다 컴파일해야 함

 

2. 절대로더 : 단순히 목적 프로그램을 메모리에 로드하는 기능만 수행

 

3. 직접 연결 로더 : 일반적인 로더, 4가지 기능을 수행

 

4. 동적 적재 로더 : 실행 시 필요한 부분만 적재, 주기억 장치의 효율성이 높으나 로드 시간 딜레이 존재

 

 

 

 

 

 

소프트웨어 테스트 기법에 화이트 박스 테스트와 블랙 박스 테스트가 있습니다.

 

이 둘은 구분하는 기준은 정보 획득 대상으로 볼 수 있습니다.

 

화이트 박스 검사(White-box testing)

 

응용 프로그램의 내부 구조와 동작을 검사하는 테스트 방식입니다.

 

소프트웨어 내부 소스 코드를 테스트 하는 기법입니다.

 

개발자 관점의 단위 테스트 방법이라 볼 수 있다. 구현 기반 테스트라고 볼 수 있다.

 

개발자가 내부 소스코드 동작을 추적 할 수 있기 때문에

 

동작의 유효성 뿐만 아니라 코드를 꼼꼼하게 테스트 할 수 있습니다.

 

테스트의 종류

1. 제어 흐름 테스트 : 프로그램의 제어구조(if, case, loop)를 테스트 함

2. 데이터 흐름 테스트 : 제어 흐름 그래프에 데이터 사용 현황(정의, 소멸, 사용)을 테스트함

3. 분기 테스트

4. 경로 테스트

 

 

 

 

구조 기반 테스팅 검증 기준 (커버리지)

 

문장 검증 : 모든 문장이 한번씩 수행되도록 검증하는 기준

 

선택(분기) 검증 : 경로에서 나타나는 모든 분기점 파악

 

경로 검증 : 수행 가능한 모든 경로를 검사

 

조건 검증 : if, while문 안에 있는 조건 검사

 

 

블랙 박스 검사(Black-box testing)

 

소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식

 

올바른 입력과 올바르지 않은 입력을 입력하여 올바른 출력이 나오는지 검사한다.

 

사용자 관점의 테스트 방법이라고 볼 수 있다. 명세 기반 테스트 방법이라 볼 수 있다.

 

필요한 것은 특징, 요구사항, 설계도 등이다.

 

동등 분할 기법 : 입력 데이터를 특성에 따라 클래스로 분류, 경험에 의존

ex) x값이 0~100인 경우 x<0, x=50, x>100

 

경계값 분석 기법 : 경계값에서 에러가 발생될 확률이 높다는 점을 이용.

ex) x값이 0~100인 경우 x=0, x=100, x=-1, x=101

 

오류 예측 기법 : 각 시험 기법들이 놓치기 쉬운 오류들을 감각, 경험으로 테스트 

 

원인 결과 그래프 기법 : 입력 데이터간 관계가 출력에 미치는 영향을 그래프로 표현

 

요구사항 추적 매트릭스 : 고객의 요구사항 중 빠진 사항은 없는지 추적하는 매트릭스

 

상태 전이 테스팅 : 시스템의 상태(모드)가 변화함에 따른 테스트

 

의사결정 테이블 테스팅 : 논리적인 조건이나 상황을 구현하는 시스템 요구사항을 도출하거나

 

내부 시스템 디자인을 문서화하는 테스팅 

https://www.ibm.com

 

 

 

 

http://www.jidum.com

 

지식덤프

지덤 사전 '지식덤프'의 줄임말로 해당 주제에 대한 지식을 집대성하여 정리한 내용을 의미합니다.

www.jidum.com

테스트에 관한 내용이 좋은 사이트

군생활을 할 때 서버를 관리하는 업무를 잠깐 했었는데요

 

그때 처음에 리눅스와 유닉스가 뭔지 헷갈렸던 경험이 있어 정리해 보겠습니다!

 

우선 위키백과 내용부터 보시겠습니다.

 

유닉스(Unix)

유닉스(영어: Unix)는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 시분할 운영 체제이다.[1] 1970년대 초반 벨 연구소 직원인 켄 톰슨, 데니스 리치 등이 처음 개발하였다. 오늘날의 유닉스 시스템은 여러 회사들과 비영리 단체들이 이 커널로 활용하여 다양한 운영체제를 개발하고 있다.

유닉스는 처음부터 다양한 시스템 사이에서 서로 이식할 수 있고, 멀티 태스킹 다중 사용자를 지원하도록 설계되었다. 유닉스 시스템은 다음과 같은 개념을 가지고 있다.

  • 일반 텍스트 파일, 명령행 인터프리터, 계층적인 파일 시스템, 장치 및 특정한 형식의 프로세스 간 통신을 파일로 취급 등.

  • 소프트웨어 공학 측면에서, 유닉스는 C의 사용과 유닉스 철학이라는 부분이 특징이다.

-위키백과

 

리눅스(Linux)

리눅스(영어: Linux)는 리누스 토르발스가 커뮤니티 주체로 개발한 컴퓨터 운영 체제이다. 혹은 커널을 뜻하기도 한다. 리눅스는 자유 소프트웨어 오픈 소스개발의 가장 유명한 표본으로 들 수 있다. 리눅스는 다중 사용자, 다중 작업(멀티태스킹), 다중 스레드를 지원하는 네트워크 운영 체제(NOS)이다.

엄밀하게 따지면 이 ‘리눅스’라는 용어는 리눅스 커널만을 뜻하지만, 리눅스 커널과 GNU 프로젝트의 라이브러리와 도구들이 포함된, 전체 운영 체제(GNU/리눅스라고도 알려진)를 나타내는 말로 흔히 쓰인다. 리눅스 배포판은 핵심 시스템 외에 대다수 소프트웨어를 포함한다. 현재 200여 종류가 넘는 배포판이 존재한다.

 

-위키백과

 

 

우선 리눅스, 유닉스 모두 OS 입니다.(OS = 운영체제, 대표적인 운영체제로는 Windows가 있습니다.)

 

그리고 각 특징을 간단히 설명하면

 

유닉스는 서버에 특화된 운영체제입니다.

 

리눅스는 유닉스에서 파생된 운영체제입니다.

 

유닉스는 서버에 특화된 운영체제이기 때문에 포털이나 대기업의 서버에 사용되며 보안성이 매우 뛰어납니다.

 

리눅스의 장점은 리눅스 운영체제 소스코드를 무료로 배포했다는 점입니다.

 

이를 통해 레드햇, 우분투 같은 다양한 리눅스 배포판이 나타났습니다.

대표적인 리눅스 : Ubuntu, RedHat

대표적인 유닉스 : Oracle Solaris

 

이제 세부 특징을 살펴보겠습니다.

 

리눅스는 오픈 소스이기 때문에 버그가 발생하면 많은 기관, 사용자들이 나서서 보완합니다.

 

따라서 커뮤니티 활성화되어 있어서 정보를 얻기에 용이합니다.

 

리눅스를 공부하다 보면 커널(kernel)쉘(Shell)이 나옵니다.

 

리눅스 커널- 파일 입출력, 주변 장치 관리, 프로세스 관리, 통신 관리, 메모리 관리 등의 리눅스 운영체제의 기능을 담당

 

리눅스 쉘 - 사용자와 OS 간의 중계역할 즉, 명령어 처리기 역할을 수행 

 

더욱 쉽게 풀어서 설명하면 커널은 하드웨어 제어를 담당합니다.

 

윈도우의 드라이버처럼 HW, SW사이를 연결해주는 인터페이스를 제공하고

 

CPU,  메모리 제어, 보조기억장치에 파일을 저장, 읽어오는 역할을 합니다.

 

쉘은 이 커널을 조작하기 위한 수단입니다.

 

자주 사용되는 쉘은 bash, sh, csh 등이 있습니다.

 

유닉스는 운영체제 코드가 공개되어있지 않아 버그 이슈 같은 경우 IBM사에서 일괄 관리합니다.

 

가격적인 측면에서는 당연히 유닉스 가격이 비쌉니다.

 

 

여기서 같은 운영체제인 윈도우랑 비교를 해보면

 

윈도우는 상대적으로 신뢰성이 낮습니다. 따라서 해킹이나 버그가 많죠.

 

또한 윈도우는 대량의 네트워크 부하를 감당하지 못하기 때문에 네트워크 솔루션으로 적합하지 않습니다.

 

유닉스와 비슷하게 윈도우는 마이크로스프트에서 일괄 관리합니다.

개발방법론이란? 

 

개발을 할 때에 좀 더 효율적이고 체계적으로 개발하기 위해 정리된 방법이라고 생각하시면 될 거 같습니다.

 

 

소프트웨어 개발 방법론 소프트웨어를 생산하는 데에 필요한 프로그래밍 개발 과정들을 정리하고 표준화하여 프로그래머들이 프로그래밍 개발과정에서 각개인이 개발과정에서의 일관성을 유지하고 프로그래머들 간의 효과적인 협업이 이루어질 수 있도록 돕기 위한 방법론이다.

                                                                                                                                                       

출처 : 위키백과

 

 

검색을 하다보니 방법론에 심취하지 말고 개발이나 하자라는 의견들이 보이더라고요.

 

실질적인 개발이 우선적으로 중요한게 맞지만 초기에는 이런 체계도 중요하다고 생각합니다.

 

이제 개발방법론의 종류를 살펴보겠습니다.

 

*폭포수와 애자일 방법은 비교하여 많이 다루니 잘 봐주세요!

 

폭포수 모델 - 애자일 방법론 - V모델 - 나선형 모델 - 원형 패러다임

 

 

폭포수 모델 (Waterfall model)

고객이나 프로젝트 진행에서 원하는 것이 확실하여 후에 변경하지 않을 때 사용하면 좋은 방법론입니다.

 

폭포수 방법론은 프로젝트 시작 전에 계획을 확실히 수립하지만 애자일 방법론은 그렇지 않습니다.

 

애자일 방법론은 계획이 그때그때 수정될 수 있습니다.

 

진행사항을 쉽고 확실하게 파악할 수 있고, 프로젝트 관리 용이하다는 장점이 있습니다.

 

중간에 발생하는 사용자 요구사항에 대처하기 힘들다는 단점이 있습니다.

 

 

애자일 방법론(Agile)

출처 https://www.mk.co.kr/news/economy/view/2018/11/718895/

 

개발방법론을 검색하면 절대적으로 많이 나오는 애자일 방법론입니다.

 

빠르고 잦은 피드백을 통해서 짧은 주기로 제품을 개발하여 제품에 대한 피드백을 많이 받아

 

제품의 질을 향상시키는 개발 방법이며,

 

계획이나 문서가 아닌 실질적인 코딩을 중요시하고

 

짧은 개발 주기를 반복하여 위험 요소를 최소화시킨다는 중요한 특징을 가지고 있습니다.

 

 

세부적으로 본다면 개발 대상을 다수의 작은 기능으로 분할하여

 

하나의 기능을 하나의 반복 주기 내에 개발하는 방법하고 

 

이 반복 주기를 계속해나가며 하나씩 기능을 추가해 개발하는 것입니다.

 

 

중간중간 필요한 요소를 바꿔 변화에 대처할 수 있고 중간 중간 테스트를 하며 버그에 대처할 수 있다는 장점

 

정확한 계획이 없다면 비효율적이다는 단점이 있습니다.

 

 

가장 고객의 요구에 잘 대응할 수 있는 방법론입니다.

 

 

 

V 모델

출처 https://www.oss.kr

 

폭포수 모델에 테스트 단계 추가된 폭포수 모델의 확장된 형태로 볼 수 있습니다.

 

폭포수 모델은 문서, 산출물 중심으로 진행

 

단계가 명확하고 모든 단계마다 검증작업이 있어 오류를 줄일 수 있다는 장점이 있습니다.

 

테스트를 마지막 단계에 하기 때문에 기본적인 치명적인 문제가 처음에 간과될 수 있는 단점이 있습니다.

 

나선형 모델 (Spiral model)

 

출처 위키

 

소프트웨어의 리스크(위험)를 명백히 측정하는데에 좋은 모델입니다.

 

위험 분석이라는 요소가 추가되어 높은 위험도가 예상되는 경우에 사용합니다.

 

그림과 같이 나선형으로 돌면서 점진적으로 개발합니다.

 

비용이 많이 들고 복잡한 시스템을 개발하는데 유용하다는 장점이 있지만

 

프로젝트 관리가 복잡할 수 있다는 단점이 있습니다.

 

 

원형 패러다임 (Prototyping)

 

출처 https://m.blog.naver.com/PostView.nhn?blogId=whatclouds&logNo=220226873106&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

고객의 요구사항이 무엇인지 구체적으로 모르는 상황에서 간단한 시제품(Prototype)을 만들어 

 

피드백을 통해 고객의 요구사항을 만족해나가는 방법론입니다.

 

시제품을 확인함으로써 고객의 요구사항을 구체적으로 확인할 수 있는 장점이 있습니다.

 

하지만 시제품을 통해 오해를 불러올 수 있는 단점이 있습니다.

 

먼저 그 전에 기억에 남는 본받을만한 프로그래머는 누가 있었나 생각하게 되었습니다.


먼저 이두희님


멋쟁이사자처럼 활동을 했었어서 그런지


자신의 재능을 후배들 양성을 위해 무료로, 어떻게 보면 금전적으로 거기에다가 시간을 투자하여서


개인적으로 멋있다고 느꼈습니다.


(나는 저렇게 할 수 있을까?)


그리고 우리 교수님


자신이 가진 지식을 잘 활용하여 제품을 훨씬 편리하게 하는데 기여하신,


그리고 수업 중에도 항상 해당 이론이 물리적으로 무슨 의미를 가지고 있는지 강조 하셨습니다.



그리고 이번에 멋있다고 생각한 상상터전 개발자 반병형님




카이스트 인공지능 석사를 하시고 지금은 공인요원으로 근무 중이시다.


멋있다고 생각한 점은 불편하다고 생각하는 점을 행동으로 직접 옮겨 개선하는 점


군대 생활을 하면 얼마나 일처리가 무의미하고 비효율적으로 처리되는지 많이 느끼게 됩니다.


하지면 반병헌 님은 자신의 장점을 잘 살려서 그런 비효율적인 일을 코딩으로 자동화 시키는 등의


일을 해내십니다.


그리고 해당 블로그에 가면 위와 같은 글뿐만 아니라 스타트업을 하시면서 느낀 점의 글도 많으니


보시면 좋을 거 같습니다.


https://brunch.co.kr/@needleworm#articles




'전자공학 > 프로그래밍' 카테고리의 다른 글

리눅스 VS 유닉스  (1) 2019.04.28
소프트웨어 개발방법론  (2) 2019.04.02
프로그래밍 언어 순위  (0) 2018.12.01
C언어란? C언어 시작하기!  (0) 2017.11.10
HTML, CSS, JavaScript란? 간단히 알아보자!  (0) 2017.11.01

검색 중에 프로그래밍 언어 순위를 보고 재밌어서 포스팅에 남깁니다. 


https://www.tiobe.com/tiobe-index/


1위는 자바!


웹 개발이나 앱 개발에 활발히 사용되고 있습니다.


2위는 C!


C는 뭐 언어의 가장 기본이죠. 워낙 광범위하게 사용되고 있습니다.


그리고 AI에 활발히 사용되고 있는 파이썬


빅데이터 R, 구글이 개발한 Go, 


공대생들이 많이 사용하는 Matlab!


 


이번 글은 프로그래밍 카테고리에 필수로 있어야 한다고 생각하는 C언어에 대해서 작성해보도록 하겠습니다.


프로그래밍의 기본이자 제일 중요하다고 생각하는 C언어! C language!


C는 1972년 벨 연구소에서 켄 톰슨과 데니스 리치가 유닉스 운영체제에 사용하기 위해 개발한 프로그래밍 언어입니다.


켄 톰슨이 B언어를 만들었고 데니스 리치가 이를 개선하여 C언어를 만들었습니다.


그리고 이후 나온 무수한 프로그래밍 언어가 C언어를 기반으로 만들어졌습니다. 


따라서 C는 실질적으로 모든 컴퓨터 시스템에서 사용 가능한 언어입니다.


그래서 대학에서 프로그래밍 언어를 배울 때 C언어를 제일 먼저 배우는 거 같습니다.


현재 윈도우에서 가장 많이 사용하는 C언어 IDE는 비쥬얼스튜디오(Visual stdio)입니다.


IDE란 통합 개발 환경을 뜻하고 통합 개발 환경이란 코딩, 디버그, 컴파일, 배포 등을 하나의 프로그램에서 처리하는 환경입니다.


몰랐는데 요즘은 마이크로소프트 홈페이지에서 비쥬얼스튜디오를 아예 무료로 제공을 하더라고요.


예전엔 드림스파크에서 학교메일을 인증하고 복잡하게 무료로 설치했는데 의외의 희소식이네요!


그것도 비주얼스튜디오2017을 커뮤니티 버전으로 제공한다고 하네요!!


처음하시는 분이나 다 까먹으신 분들을 위해서 친절하게 C언어 사용법을 알려드리겠습니다! ㅎㅎ


사용법 예제로는 Hello World가 최고죠!


저는 현제 Visual Studio 2013 사용중입니다.


C파일을 만들기 위해서 먼저 프로젝트를 생성해야합니다.


메인화면에서 Start - New Project를 클릭해도 되고 메인화면이 안보인다면


탭 File - New - Project  or  Ctrl+Shift+N 단축키를 사용하셔도 됩니다.


그리고 Templates - Visual C++ - General - Empty Project를 선택하시고 원하는 프로젝트 이름을 입력하고 OK를 클릭하시면 됩니다.

그리고 Solution Explorer - 해당 프로젝트 - Source Files - 오른쪽 마우스 클릭 - add - New item 을 클릭합니다.


C++파일을 선택하시고 파일명만 .c로 바꿔줍니다. 파일명은 상관없습니다! ㅎ



위와 같이 코드를 입력해줍니다.



만약 위와 같은 검은색 결과창 cmd 창이 바로 사라진다면 return 0; 바로 윗줄에 getchar();를 추가해보세요!


그러면 문자를 입력받을 때까지 멈춰있겠다는 뜻입니다.


그러면 간단히 코드를 살펴보겠습니다.  


#include <stdio.h>


int main()

{

printf("Hello World\n");

return 0;

}


Hello World를 통해서 C언어의 기본구조를 살펴보겠습니다.


#include <stdio.h>


이 줄은 헤더파일 stdio.h를 포함하겠다는 뜻입니다.


stdio는 Standard input/output의 줄임말이며 표춘입출력 라이브러리로 다양한 입출력 함수를 내장하고 있습니다.


int main()


중요한 main 함수입니다. 저는 이 프로그램이 뭐하는 프로그램인지 확인할 때 main함수부터 들여다 봅니다.


int는 출력형태 main은 메인함수여서 main으로 함수이름을 짓고 (void) 는 입력형태입니다.


그리고 중괄호{} 안에 주요 함수들과 변수들이 위치합니다.


printf();


stdio.h에 내장되어있는 출력함수입니다.  결과창에 원하는 내용을 출력합니다.


return 0;


return은 함수가 반환하는 값을 나타냅니다.


main 함수에서는 0을 반환하고 메인함수를 종료합니다.


모두 C언어 공부 화이팅입니다!!!

+ Recent posts