안녕하세요! 공대남입니다. 오늘은 c++의 생성자와 소멸자에 대해서 알아보겠습니다.

객체지향언어에서는 클래스가 굉장히 중요하고 큰 부분을 차지합니다.

이전 글에서 클래스안 private 객체의 멤버변수를 초기화할 때는 클래스 내의 public 함수를 호출하여

맴버를 초기화 하였습니다. 하지만 이 생성자를 사용하면 객체도 생성과 동시에 초기화 할 수 있습니다.

그럼 이 '생성자'와 '소멸자'에 관해서 자세히 알아보도록 하겠습니다.


차례

1. 생성자

2. 소멸자

1. 생성자


먼저 지난 번에 썼던 코드를 활용해보겠습니다. 이와 같은 경우 Point2D의 private의 객체멤버 int x, y를 초기화 하기위해서

Init() 함수를 활용해서 접근해야만 했습니다.

하지만, 이와 같은경우는 꽤나 번거로울 수 있습니다.

( 제한적 값만 받아들이기 위해서 정보은닉을 하는 경우를 제외 한다면 )

그래서 이와같은 귀찮음을 생성자가 덜어 줍니다. 그럼 생성자를 사용한 코드를 보겠습니다.

생성자는 public 에서 다음과 같은 특징을 가지고 생성됩니다.

1) 클래스의 이름과 함수의 이름이 동일하다.

2) 반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다.

이러한 유형의 함수를 가리켜 생성자라고 하며, 객체 생성시 딱 한번만 호출됩니다.

void ShowInfo() 는 객체멤버들의 값을 출력합니다.

그리고 메인함수에서 Point2D p1; 이라고 선언하게 되면 선언과 동시에 멤버가 초기화가 됩니다.

컴파일 하게되면 다음과 같이 출력됩니다.

다음과 같이 10,20이 클래스를 선언하자마자 초기화 되었습니다.

2. 소멸자

객체생성시 반드시 호출되는 것이 생성자라면, 객체소멸시 반드시 호출되는 것이 소멸자입니다.

소말자는 다음과 같은 특징을 갖고 있습니다.

1) 클래스의 이름 앞에 '~'가 붙은 형태의 이름을 갖는다.

2) 생성자와 같이 반환형이 선언되어 있지 않습니다.

3) 매개변수는 void형으로 선언되어야 하기 때문에 오버로딩이나 디폴트 값 설정이 불가능합니다.

다음과 같이 인적 정보를 저장하는 클래스를 만들었습니다.

객체 멤버로써는 name 과 age 가 있습니다.

public 영역에는 생성자를 통하여 이름과 나이를 선언과 동시에 초기화 할 수 있도록 했습니다.

그리고 밑에 보시면 ~Person() 이라는 소멸자가 있습니다.

위 코드에서 보이는 것과 같이 소멸자를 정의하면 됩니다.

그럼 할당된 메모리가 해체가 됩니다.

-

오늘은 쉽게 알아보기위해 생성자와 소멸자에 관련된 간단한 코드를 보았습니다.

객체지향언어에서는 class가 큰 부분을 차지하기 때문에 잘 알아두시면 매우 유용할 것 입니다.

다음번에는 더 좋은글 글과 정보로 찾아뵙도록 하겠습니다. 감사합니다.

안녕하세요! 공대남입니다. 오늘은 정보은닉 ( information hiding )에 대하여 알아보도록 하겠습니다.

정보은닉은 쉽게 말 하자면 변수를 초기화할 때 제한을 두는 겁니다.

예를 들자면 자연수만을 입력 받아야 할 때 음의 값을 입력받게 되면 안됩니다.

그래서 선언된 변수에 값을 입력할 때 자연수만 입력되도록 제한을 두는 겁니다. 그럼 자세히 알아보겠습니다.

차례

1. 정보은닉의 이해

2. 정보은닉을 이용한 프로그래밍 예시

1. 정보은닉의 이해

일단, 간단한 예시 코드를 보겠습니다.

naturalNumber (자연수)라는 클래스를 선언하고 private 부분에 정수형 변수를 선언했습니다.

변수가 private로 선언되어 있기 때문에 public의 init 함수에서 접근해서 값을 할당합니다.

하지만 코드를 보시면 

void Init(int n)

{           

      num = n;

... }

값을 할당하는데 어떠한 조건도 없기 때문에 할당되는 값이 자연수 인지 아닌지 구분하지 못합니다.

그렇게 때문에 main함수에서 n.Init(-2)로 -2값을 보내면 그대로 할당됩니다.

이를 방지하기 위해, 변수가 선언될 때 함수를 별도로 정의해서 안전한 형태로 변수의 접근을 유도하는 것이 정보은닉 입니다.

그럼 이를 정보은닉을 올바르게 사용해서 고친 코드를 보겠습니다.

-

2. 정보은닉을 이용한 프로그래밍 예시

위의 코드를 보시면 void Init 의 if문을 추가하여 자연수 인지 아닌지를 판별하게 했습니다.

if (n > 0) 에 의해서 함수에서 전달된 인수 값이 양수인지 음수인지 판단하게 됩니다.

그리고 자연수일 경우에 num = n; 으로 값을 할당하고 그 값을 출력하도록 했습니다.

그리고 그 밖의 값 즉, 음수 일때는 자연수가 아니라는 문구를 출력하도록 했습니다.

이것을 컴파일 하게 되면

5를 입력했기 때문에 Init 함수의 if,else 문에 의해서 값을 판별하고 입력이 되었습니다.

하지만, 다른 음수를 넣게 되면

자연수가 아니라는 문구가 출력됩니다.

이렇게 자연수만 입력되도록 변수 입력을 유도하는것이 정보은닉입니다.

-

오늘은 정보은닉에 대해서 아주 간단하게 코드를 짜서 알려드렸습니다. 정리하자면 정보은닉이란

제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 돕고, 실수를 했을 때는 쉽게 발견되도록 하는 것입니다.

정보은닉이 잘 쓰인 프로그램일 수록 좀 더 안정적이고 정교합니다. 그렇기 때문에 필수적으로 쓰입니다.

처음엔 이해하기 힘들수도 있지만, 잘 알아두시면 좋습니다.

오늘 준비한 글은 여기까지입니다. 다음번에는 좀 더 유익할 정보와 글로 찾아뵙겠습니다. 감사합니다!

안녕하세요! 공대남입니다. C언어부터 공부하시고 C++를 하시는 분들은 클래스를 처음 접하실 것 입니다.

(객체지향언어를 처음 하신다면) 객체지향언어에서는 클래스와 객체가 중요한 개념입니다.

오늘은 클래스의 정의에 대해 알아보고 구조체와 어떤 차이점이 있는지 알아보겠습니다.

차례

1. 클래스의 정의

2. 접근제어 지시자

3. 구조체와 클래스의 차이점

1. 클래스의 정의

클래스의 정의를 설명하기 앞서 간단한 구조체의 코드를 예를 보겠습니다.

2차원 좌표계 데이터를 구조체를 통해서 만들었습니다. 메인함수에서 p1을 선언하고 구조체를 초기화해주면 됩니다.

구조체와 클래스 둘 다 연관 있는 데이터를 묶을 수 있는 문법적 장치입니다.

여기서 클래스로 바꾸고싶다면, struct를 지우고 class를 써주면 됩니다.

그런데 그대로 컴파일을 한다면 오류가 발생합니다.

그러면 둘 다 데이터를 묶는 문법적 장치이고 선언하는 법도 같은데 왜 이런 오류가 발생할까요?

그 이유는 바로 접근법의 차이입니다. 이 차이가 클래스와 구조체의 차이입니다.

이 차이는 접근제어 지시자를 설명하며 구체적으로 설명하겠습니다.

-

2. 접근제어 지시자

C++ 접근제어 지시자는 다음과 같이 총 세가지가 존재합니다.

public : 어디서든 접근허용

protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용

private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용

다음과 같이 정의 됩니다. 그럼 여기서 위에서 왜 오류가 났는지 설명이 됩니다.

구조체의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 public으로 선언됩니다.

그래서 어디서든 접근이 가능해서 main함수에서의 초기화가 가능했습니다.

반면, class의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 private로 선언됩니다.

그렇기 때문에 main함수에서 초기화가 불가능했습니다.

 그래서 다음과 같이 코딩을 해보겠습니다.

좌표 x, y의 데이터를 private로 선언합니다. main에서 이 객체로 직접적으로 접근이 불가능합니다.

그리고 초기화 함수를 class 안에 public으로 정의합니다.

이 클래스의 함수를 public으로 정의했기 때문에 메인함수에서 접근이 가능합니다.

Init() 이라는 함수는 Point2D라는 클래스 안에 있기 때문에 좌표 x, y 의 데이터의 접근이 가능합니다.

그렇기 때문에 메인함수에서 클래스 함수를 호출하여 초기화가 가능합니다.

-

3. 구조체와 클래스의 차이점

마무리로 정리하자면 클래스와 구조체의 역할은 큰 차이는 없습니다.

둘 다 객체를 묶는 문법적인 역할을 합니다. 이 둘을 가르는 차이는 선언에 따른 차이 입니다.

즉, 구조체는 접근제어 지시자를 선언하지않으면 public 으로

클래스는 private로 선언된다는 것 입니다.

안녕하세요? 공대남 입니다. 오늘은 C++ 참조자에 관하여 알아보겠습니다.

참조자는 포인터와 비슷한 성격을 띄지만 다른 개념입니다.

그리고 포인터와 참조자의 차이점에 대해서도 알아보도록하겠습니다.

C언어에서는 다루지 않았기 때문에, 처음 접하시면 햇갈리실 수도 있습니다.

차례

1. 참조자의 개념

2. 참조자와 포인터의 차이

1. 참조자의 개념

변수는 할당된 메모리 공간에 붙여진 이름입니다.

num1 = 10; 과 같습니다.

여기에 이름을 더 부여할 수 있습니다.

참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름입니다.

간단히 말하면 별칭같은 것 입니다.

위의 코드를 보겠습니다.

참조자는 & 을 이용하여 선언합니다

이미 선언된 변수의 앞에 이 연산자가 오면 주소 값의 반환을 명령하는 뜻이지만,

새로 선언되는 변수의 이름 앞에 오면 참조자의 선언을 뜻하게 됩니다.

그래서 int &num2 = num1; 과 같이 선언합니다.

num1에 num2라는 참조자를 선언했습니다. 이 코드를 실행해보겠습니다.

num2에 다가 10을 더해 줬기 때문에 num1도 20으로 출력됩니다.

num2가 num1의 다른이름이라고 생각하시면 좀 더 잘 이해가됩니다.

즉 num2는 num1의 다른이름이고 num2를 변화시키는 것은 num1을 변화 시키는 것 입니다.

또 레퍼런스는 하나의 변수에 다수의 참조자를 선언할 수 있습니다.

int &num2 = num1;

int &num3 = num1;

int &num4 = num1;

다음과 같이 선언하면 하나의 변수에 다향한 레퍼런스를 선언할 수 있습니다.

-

2. 참조자와 포인터의 차이

(1) 포인터는 NULL 값이 있지만, 참조나는 NULL 값이 없다.

NULL값이란, 결정되지 않거나 모르는 값을 의미합니다.

하지만 참조자는 선언시 바로 초기화 해주어야 합니다.

(2) 참조자는 변수를 입력 받고 포인터는 주소값을 입력 받는다.

(3) 참조자는 한번 지정한 객체를 변경할 수 없지만, 포인터는 가능하다.

참조자는 한번 객체를 정하면 바꿀 수 없습니다.

하지만 포인터의 경우 주소값을 변경하여 바꿀 수 있습니다.

다음과 같은 차이점이 있습니다.

공통점은 둘 다 다른 객체(변수)를 간접적으로 참조한다는 것 입니다.

처음 참조자를 접하신다면 햇갈리실테니 차이점을 숙지하고 계시면 쉽게 이해가 될 것입니다.

-

간단하게 레퍼런스의 개념과 레퍼런스와 참조자의 차이점과 공통점에 대해서 알아보았습니다.

저는 C언어의 포인터와 개념이 비슷해서 처음에 햇갈렸지만, 차이점을 알고나니 잘 이해가 되었습니다.

이번 정보는 유용하셨나요? 다음번 강의에는 좀 더 유용하고 좋은글로 찾아 뵙도록하겠습니다. 감사합니다!


안녕하세요? 공대남입니다. 오늘은 이름공간에 대하여 알아보도록 하겠습니다.

namespace 같은 경우는 함수의 이름이 겹칠 때 사용하게 됩니다.

이전에 배웠던 함수 오버로딩은 매개변수의 형식이나 수가 다를 때 자동으로 구분되지만

매개변수 형식이나 수도 같다면 함수를 구분할 수 없습니다.

여기서 함수 이름과 매개변수 형식도 같을 때 구분할 수 도 있도록 해주는것이

'이름공간(namespace)' 입니다.

차례

1. namespace

2. using 을 통한 명시

1. namespace

쉽게 설명하기 위해 예를들어 보겠습니다.

A,B라는 회사에서 프로그래밍 대형화를 위해 서로가 시스템을 개발하는데 참가했습니다.

그리고 서로의 코드를 비교해보니 상당 부분 함수가 겹치는 것입니다.

이럴 때는 두 회사 중 하나가 바꾸어야 하지만, 서로가 좀 처럼 양보하기 싫은겁니다.

그럴 때 이름공간이 유용합니다. 이름공간의 함수 호출법은 다음과 같습니다

만약 Func1 이라는 함수가 겹친다면 namespace 를 이용하여 호출하면

A회사의 Func1을 호출해라 ! 이처럼 됩니다.

다음 코드의 예시를 보겠습니다.

namespace를 이용해 각각 Acom, Bcom를 명시하고 함수를 그 안에 적습니다.

(함수를 먼저 선언하고 정의해도 됩니다.)

그리고 main 함수에서 Acom::Func1(); , Bcom::Func1(); 로 각각 호출을 합니다.

여기서 :: 은 범위지정 연산자 입니다. 즉, 이름공간을 지정할 때 사용합니다.

그러면 다음과 같이 출력됩니다.

함수의 이름과 매개변수의 형식이 같더라도 namespace를 사용하여

얼마든지 구별하여 사용할 수 있습니다.

그러면 여기서 앞서 입출력 코드로써 std::cout , std::cin , std::endl을 사용했는데,

이것도 namespace의 사용과 유사하다고 느끼셨을 것 입니다.

그렇습니다. cout, cin, endl은 std안에 선언되어있고 그것을 사용하던 것이 였습니다.

-

2. using을 이용한 명시

cout, cin, endl이 std에 선언된 함수라는 것은 알았는데

이를 사용할 때 마다 std:: 을 붙여주기에는 귀찮으실 수도 있습니다.

이를 위해 using을 사용하면 생략하고 사용 가능합니다.

다음과 값이 using을 통해 선언하면

cout, cin, endl을 std의 이름공간에서 찾으라고 하는 것과 같습니다.

그렇게하면 std를 생략하고 코드를 사용할 수 있습니다.

만약 일일히 std::cout, std::cin, std::endl을 선언하시는게 귀찮으시다면

using namespace std; 을 선언함으로써

름공간 std 에 있는 모든 것에 대해 이름공간 지정을 생략할 수 있습니다.

하지만 프로그램이 복잡해지고 커진다면 오류가 생길 확률도 커집니다.

-

이상 오늘은 namespace에 대하여 알아보았습니다. 도움이 되셨는지요?

다음 c++강의에서는 좀 더 유익하고 좋은 글로 찾아뵙겠습니다. 감사합니다!

안녕하세요? 공대남입니다. 오늘은 함수 오버로딩과 매개변수 디폴트값에 대해서 살펴보겠습니다.

오버로딩과 매개변수 디폴트 값은 C언어에서는 동작하지 않는 기능입니다.

둘 다 함수에 관한 기능이고 그렇게 어렵지 않습니다. 그럼 자세히 알아보도록 하겠습니다.

차례

1. 함수 오버로딩 (Function Overloading)

2. 매개변수의 디폴트 값

1. 함수 오버로딩

C언어에서는 함수 이름이 같으면 컴파일 오류가 생깁니다. 그 이유는 간단합니다.

C언어에서 함수를 호출할 때 함수 이름으로 그 함수를 찾습니다. 그런데 함수 이름이 같은것이

두개 이상 있다면 컴파일 오류가 생깁니다. 하지만 C++에서는 함수 이름이 같아도

컴파일 오류가 생기지 않습니다. 그 이유가 뭘까요?

다음 예시와 함께 알아보겠습니다.

MyFunc 이라는 이름이 같은 함수 3가지를 정의합니다.

그런데 여기서 매개변수가 다를 다는 것이 보이시나요?

함수의 내용은 "MyFunc(void) called" 와 같이 어떤 매개변수를 가진 MyFunc이 호출 되었다고 출력합니다.

그런 다음 int main 에서 함수를 하나씩 호출 합니다. 각 매개변수 자료형에 맞게 인수를 입력합니다.

그러면 다음과 같이 컴파일 오류가 나지않고 프롬프트창에 출력됩니다.

즉, 함수 이름이 같아도 매개변수의 선언형태가 다르면 함수를 구분하여 호출 가능 한다는 것 입니다.

여기서 중요한 포인트는

C언어함수의 이름으로만 함수를 찾고 호출한다.

C++ 함수의 이름 매개변수(자료형, 개수)를 고려하여 호출한다.

그렇기 때문에 이름이 같아도 컴파일 오류가 나지 않습니다.


2. 매개변수의 디폴트 값

'디폴트 값'이란 '기본적으로 설정되어 있는 값'을 의미합니다.

예상해보자면, 매개변수의 기본 값이 설정되어 있다는 것 입니다.

다음 예시로 자세히 알아보겠습니다.

함수 Addnum (두 매개변수의 합을 반환하는 함수) 의 매개변수의 디폴트값을 5, 10으로 지정했습니다.

이 말은 인수가 전달되지 않는다면 num1 과 num2의 값을 5, 10으로 지정한다는 의미입니다.

int main에서 인수가 없을 때, 하나만 전달했을 때, 모두 전달했을 때를 출력하도록 되어있습니다.

컴파일을 완료시키면 다음과 같이 나옵니다.

첫번째 AddNum() 인수가 하나도 전달 되지 않았을 때는 매개변수의 디폴트값이 더해져 5+10의 값이 출력됩니다.

그 다음 인수가 하나가 전달되면 전달된 인수 1과 num2의 디폴트값 10이 더해집니다.

여기서 인수는 매개변수의 왼쪽부터 채워집니다. 즉, 하나가 전달되면

num1과 num2 중 왼쪽에 있는 num1부터 채워집니다.

마지막으로 인수가 모두 전달되면 전달된 두 인수의 합이 출력됩니다.


-

지금까지 C언어와 차이점인 오버로딩과 매개변수 디폴트값에 대하여 알아보았습니다.

유익한 정보였기를 바랍니다. 다음번에는 좀 더 유용한 정보와 글로 찾아오겠습니다.

감사합니다!

안녕하세요? 공대남입니다. 어떠한 프로그래밍 언어이던지 가장 처음 배우는 코드는 입출력 코드입니다.

C++언어에 관한 글을 본격적으로 연재를 시작하며 iostream 헤더에 대하여

그리고 입출력에 관한 명령어 cout, cin에 대하여 알아보겠습니다.

이 부분은 크게 어렵지 않아서 "아하 그렇구나" 이 정도로 알고 한번씩 코딩만해봐도 충분합니다.

차례

1. C++언어의 간략한 소개

2. 헤더파일 iostream

3. std::count , cin

1. C++ 언어의 간략한 소개

C++언어는 C언어의 확장판의 개념입니다. 하지만, 공통점도 있지만 전체적으로 프로그래밍하는 방식이 다릅니다.

가장 큰 차이점이 C++언어는 객체지향적 언어이고, C언어는 절차지향적 언어입니다.

! 객체지향언어 vs 절차지향언어 차이점 !

(위 링크를 누르시면 절차지향 vs 객체지향 차이점에 대하여 자세히 보실 수 있습니다.)

그렇기 때문에 C언어를 어느정도 아셔야 프로그래밍 언어 공부가 수월합니다.

C++는 많은 응용프로그램을 만드는데 최적화 되어있습니다.


2. 헤더파일 iostream

C언어에서는 입출력을 위한 printf 함수와 scanf 함수를 사용하기 위해 해더파일

#include <stdio.h> 

같이 헤더파일을 선언합니다.

iostream은 C++에서의 위와같은 헤더파일이라고 생각하시면 됩니다.

그렇기 때문에 C++에서 입출력 함수를 쓰기위해

#include <iostream> 을 선언합니다.


3.std::cout, cin

(1) : std::cout 는 출력을 담당하는 코드입니다.

(2) : std::cin 은 입력을 담당하는 코드입니다.

다음 코드를 예시로 하나씩 살펴보겠습니다.

이 코드를 실행시키고 숫자 두개를 키보드로 입력하면

다음과 같이 출력됩니다.

여기서 << 는 하나의 연산자 입니다.  출력대상을 연이어 출력할 수 있게 도와줍니다.

std::cout 로 출력함수를 입력하고 그 다음 <<를 사용하여 출력할 것을 입력합니다.

여기서 C언어의 경우에는 %d, %s, %c 처럼 자료형에 따라 서식지정가 필요합니다.

그러나 C++ 경우에는 필요가 없습니다. 

문자열의 경우 "" 문자의 경우 '' 숫자일 경우 숫자만 입력하여 출력할 수 있습니다.

연이어 출력하고 싶은 경우 <<를 사용하여 출력하면 됩니다.

-

std::cout 밑에 std::cin을 보겠습니다. 예상하셨듯이 입력 코드입니다.

여기서 주의할 점은 <<가 아닌 >> 입니다.

숫자를 입력하고 엔터키를 누르면 개행이 됩니다.

그리고 std::endl은 개행을 하는 코드입니다. \n 와 같은 기능입니다.


-

오늘은 가볍게 입출력 함수를 사용하기 위한 헤더파일, 그리고 입출력 코드에 대하여 알아보았습니다.

관심을 가지고 꾸준히 한다면 프로그래밍은 언어 문법은 금방 배울 수 있습니다.

다음 번에는 좀 더 유용한 정보와 글로 찾아오겠습니다. 감사합니다~


안녕하세요, 대남이 입니다. 오늘은 기본적인 c언어의 함수와 매개변수와 인수가 각각 무엇인지 알아보겠습니다.

매개변수와 인수가 햇갈리는 경우가 있기때문에 확실히 알게되면 여러모로 편하실겁니다.

차례

1. 함수 정의하기

2. 매개변수와 인수

1. 함수 정의하기

함수 정의하는 방법은 간단합니다.

자료형 함수이름(매개변수) 

{ 함수 내용

   }

이와 같은 형태로 정의합니다. 그러면 함수를 이용하여

국어 점수 + 수학 점수 > 150점 이상일 경우 합격, 불합격을 통보하는 코드를 짜보겠습니다.

일단 전체적으로 보겠습니다. 국어 점수와 수학 점수에 해당하는 정수형 자료형 point1,2를 선언합니다.

그다음 scanf를 이용하여 국어,수학점수를 각각 입력하게 되고

조건문을 이용하여 점수의 합을 판단하게됩니다. 그러게 되면 150점 이상일 경우 합격을 통보하고

150점 미만일 경우 불합격을 통보하게됩니다.

여기서 if문을 보시면 plus라는 함수가 들어가있습니다.

정의한 함수를 보겠습니다.

int plus (int a, int b)

정수형 자료형의 함수이름은 plus 매개변수는 정수형 변수 a,b를 두가지를 받는다는 함수 입니다.

여기서 자료형을 int를 정했는데 그렇게되면 return값, 즉 반환값을 정수형으로 한다는 것 입니다.

만약 실수나 문자형으로 하고 싶다면 double, char로 바꿔주면 되겠죠?

상황에 맞게 하시면됩니다. void형으로 정희하면 반환값이 없는 함수가 됩니다.

즉 함수안의 코드 내용만을 쓰기위함입니다.

함수 내용을 보겠습니다.

int result; 라는 결과값을 반환할 정수를 선언합니다.

result = a + b; 로 매개변수 둘을 더한 값으로 정희하면

함수가 실행되면 두 매개변수를 더한 다음 결과값을 반환하므로

함수의 반환값은 인수로 보낸 두수를 더하고 반환하게됩니다.


(result 라는 자료형 선언없이

return a+b; 라고하면 더욱 간단하게 코딩하실 수 있습니다.

이해를 돕고자 좀 더 절차적인 코딩을 했습니다.)

-

2.매개변수와 인수

여기서 매개변수와 인수의 뜻을 정확히 알고 가셔야됩니다. 두 단어의 뜻은 크게 차이가 없어보이지만 엄연히 다릅니다.

사진과 함께 설명해보겠습니다.

빨간 줄이 그어져 있는 부분이 매개변수 입니다.

매개변수 : 함수 바깥에서 전달된 값이 저장되는 변수

빨간 줄이 그어져 있는 부분이 인수 입니다.

인수 : 함수를 호출할 때 전달하는 값이나 변수

즉, 매개변수와 인수는 같지 않습니다. 매개변수는 인수의 값이 전달되어 똑같이 저장됩니다.

엄연히 다른 데이터가 됩니다. 매개변수는 휠발성 데이터와 같습니다.

함수에서 쓰인후에 함수가 끝나면 메모리도 사라집니다.

-

오늘은 함수를 정의하는 방법과 매개변수, 인수의 뜻과 차이점에 대해 알아보았습니다.

쉽게 설명하고자 포인터나 void자료형 함수 같은경우를 제외하고 쉬운 코드를 나타냈습니다.

이해가 되셨는지요? 다음에는 좀 더 유익학 정보와 글로 찾아뵙겠습니다. 감사합니다!


안녕하세요? 대남이 입니다. 이제 프로그래밍이 필수 교육과정으로 채택되었습니다. 

프로그래밍은 저희의 삶과 일상에서 긴밀하게 이어져 있으며 4차 산업혁명이 도래하며 더욱 더 ! 

중요한 부분으로 자리매김되고 있습니다. 그리하여 많은 분들이 프로그래밍언어에 관심을 가지고 배우기 시작합니다. 

프로그래밍언어는 크게 객제지향언어와 절차지향언어로 나뉘는데 거기에 어떤 종류가 있고, 

각각 언어들이 어떤 특성을 가지는지 알아보겠습니다.

차례

1. 절차지향언어 VS 객체지향언어 비교

2. 절차지향언어란?

3.객체지향언어란?

4.각 프로그래밍 언어들의 종류

1. 절차지향언어 VS 객체지향언어 비교

첫번째 사진으로는 감이 잘 안오실겁니다. 그러면 간단한 예를 들은 두번째 사진은 보시면 어느정도 감이 오실 겁니다.

절차지향 언어를 보게되면 어떠한 행위에 대한 순차적인 진행으로 프로그램이 이어집니다.

그에 반해 객체지향 언어의 경우는 순차적인 진행이 아닙니다. 그러면 자세히 알아보도록 하겠습니다.


2. 절차지향언어란?


절차지향언어란 간단히 말하면,  말그대로 절차에 의해서 진행되는 언어입니다.

프로그래밍을 실행 순서에 의하여 코딩하게되는 언어입니다.

위의 예를 보자면, 고객이 돈을 넣습니다. 그 후 자판기에서 돈을 검사(틀릴 경우 잔돈은 주지 않습니다.)하여 제품과 잔돈을 줍니다.

고객은 잔돈과 제품을 받아갑니다. 이처럼 순서와 절차에 의해 진행되는 언어를 '절차지향언어'라고 할 수 있습니다.


3. 객체지향언어란?


일단 '객체'라는 뜻은 어떠한 데이터(실체)와 데이터와 관련된 동작을 포함한 개념입니다. 위의 예와 비유하자면

고객, 자판기, 돈, 제품, 제품을 주문 이와 같은것들이 모두 객체가 됩니다. 그리하여 이를 기반으로 프로그래밍을 정의하는 것 입니다.

즉, 절차에 따라 진행되는게 아니라 자판기라는 객체가 돈을받고 돈을 받게되면 검사하고 잔돈이나 어떤 제품을 줄지 결정하는 식으로

객체들의 상호작용(?)으로 프로그래밍이 진행되는 경우입니다. 이와 같은 경우의 언어를 '객체지향언어'라고 할 수 있습니다.


4.각 프로그래밍 언어의 종류

언어 

종류 

절차지향언어 

 C언어

객체지향언어 

 JAVA, C++, C#, 닷넷, JAVASCRIPT


이와 같은 언어들이 있습니다. 프로그래밍언어는 정말 많으며 지금도 계속해서 생겨나죠

그에따라 프로그래밍 언어도 유행한다는 사실 아시나요?

그러므로 지금 자주쓰이는 프로그래밍언어가 있을지라도 좀 더 효율적인 언어가 나온다면

그 언어는 도태됩니다. 즉, 제가 하고싶은 말은 프로그래밍언어를 공부하고자 하신다면,

그 언어의 문법을 외우는 식으로 공부하는것 보다는, 프로그래밍을 잘 할 수있도록 공부하는 것

즉, Computational Thinking (컴퓨팅적 사고)라고 하죠. 이런 사고력의 실력이 중요합니다.

글 잘 읽으셨나요? 다음번에는 좀 더 유익한 정보와 글로 찾아오겠습니다! 감사합니다.

안녕하세요 대남이입니다. 지난번 오디오, 음악 넣는법에 대해서 배워봤습니다. 이번에는 동영상을 웹페이지에 삽입하는 방법에 대해

알아보도록 하겠습니다. 브라우저에 영상을 삽입하시고 싶으실 때가 있으실텐데, html 태그를 이용하여 쉽게 하실 수 있습니다.

동영상 삽입태그는 <video> 입니다. 이 비디오 태그의 기본적인 구조를 알아보도록 하겠습니다.


비디오 태그의 기본 구조

비디오 태그의 기본적인 구조는 이와 같습니다. 처음 < video ..는 동영상 삽입 태그라는걸 나타냅니다. 

그 다음은 이제껏 많이 보셨듯이 src는 파일 소스 경로를 나타냅니다. 이때 영상의 파일명과 확장자명을 정확히 입력 해주셔야 됩니다.

autoplay는 브라우저에서 영상을 자동재생 시키는 요소입니다. 

controls은 화면에서 재상, 정지를 조절할 수 있는 제어기를 생성합니다. 비디오 태그는 이와같은 구조를 가집니다. 

그럼 autoplay , controls 같은 요소들이 있는데, 구체적으로 어떤 요소들이 있는지 알아보겠습니다.


비디오 태그의 요소들

속성 

설명 

autoplay 

비디오를 자동으로 재생 

controls 

재생을 제어하는 제어기 표시 

loop 

비디오를 반복하여 재생 

poster 

비디오를 다운로드 중일 때 표시하는 이미지 

preload 

전체 오디오를 다운로드하게 함 

muted 

비디오의 오디오 출력을 중지 

src 

URL을 지정 

width, height 

비디오의 너비와 높이를 지정 

이와 같이 정리 할 수 있습니다. 이를 이용하여 본인이 삽입하고자 하는 영상을

의도에 맞게 요소들을 사용하셔서 조절하시면 됩니다.

그럼 간단하게 영상을 넣는 코딩 예시를 보겠습니다.

src에 url을 정확히 입력하여 삽입하고자 하는 영상을 넣을 수 있습니다. autoplay를 이용하여 자동재생을 시키고

controls를 통해 제어기를 생성했습니다. 내부 스타일 시트를 이용하여 body 요소 즉, 배경을 회색을 나타냈는데,

제어기를 잘 보이게 하기위해 지정했습니다. <video> 와 </video> 태그 사이 텍스트는 브라우저가 영상을 출력하지 못했을 때

나타내는 텍스트입니다. 그럼 브라우저에 어떻게 출력되는지 살펴보도록 하겠습니다.

다음과 같이 브라우저에 출력되게 됩니다. 제어기 위에는 본인이 넣은 영상이 재생됩니다.

그리고 앞서 봤던 width, height 요소를 이용하여 본인이 표시하고자하는 크기만큼 넣을 수 있습니다.

예시로 너비 500px, 높이 300px로 조정해보겠습니다.

이렇게 비디오 태그에 width 와 heigth 요소를 넣어주시면 됩니다.

다음과 같이 설정하면 너비 500픽셀, 높이 350픽셀이 됩니다. 그러면 브라우저에는 다음과 같이 출력됩니다.

이와 같이 본인이 원하는 크기대로 출력할 수 있습니다.


여기서, 영상 파일의 출력을 실패할 때가 있습니다. 그때는 비디오 형식, 즉 확장자와 관련이 있습니다.

웹 브라우저마다 지원가능한 확장자가 다르기 때문에 발생하는 문제입니다.

비디오의 확장자는 크게 mp4 ,webM, ogg가 있는데, 웹 브라우저마다 지원하는 확장자를 밑에 정리해 보았습니다.

브라우저

MP4 

WebM

Ogg 

인터넷 익스플로러 

O 

X 

X 

크롬 

O 

O 

O 

파이어폭스 

X 

O 

O 

사파리 

O 

X 

X 

오페라 

X 

O 

다음과 같이 정리할 수 있습니다. 앞서 알아본 것들을 이용하여 본인들이 넣고자 하는 영상을

의도에 따라 알맞게 잘 나타내시면 됩니다.

-

오늘은 비디오태그에 대해서 알아봤습니다. 도움이 되셨는지 모르겠습니다.

다음번에는 좀 더 유익한 정보와 좋은 강좌로 돌아오겠습니다. 감사합니다.

+ Recent posts