9. 연산자 소개 및 단항, 산술 연산자 사용하기

  • 29 minutes to read

이번 강의는 데이터를 가공하는데 사용되는 C 언어의 풍부한 연산자에 대해서 다룹니다.

> // 연산자(Operator): 데이터와 변수를 가지고 더하기(+), 빼기(-)와 같은 연산 작업을 수행

미리보기 강의: 산술 연산자(Arithmetic Operator) 의사 코드로 소개

9.1 연산자

데이터를 가지고 연산 작업을 수행하고자 할 때 연산자(Operator)를 사용합니다. 연산자는 기능에 따라 대입, 산술, 관계, 논리, 증감, 조건, 비트, 시프트 연산자 등으로 나뉘며 이용 형태에 따라 한 개의 항을 가지고 연산을 하는 단항(Unary) 연산자와 두 개의 항을 연산하는 이항(Binary) 연산자와 세 개의 항을 연산하는 삼항(Ternary) 연산자로 나뉩니다.

그림: 연산자

연산자

9.1.1 연산자와 피연산자

연산자에는 연산자와 피연산자가 있습니다. 예를 들어 다음과 같은 코드가 있다고 가정합니다.

코드

int num = 1000;
int number = num + 1234;

+ 기호를 연산자(operator)라고 하고 num1234피연산자(operand)라고 합니다.

9.1.2 식과 문

하나의 값 또는 연산을 진행하는 구문의 계산식을 식(Expression) 또는 표현식이라고 합니다. 예를 들어 3 + 5와 같은 코드는 식입니다. 표현식을 사용하여 하나의 명령을 진행하는 구문을 문(Statement) 또는 문장이라고 합니다. 예들 들어 x = 3 + 5;와 같은 코드가 바로 문입니다.

을 사용하는 예를 다음 코드로 살펴봅니다.

코드: operator_description.c

//[?] 연산자(Operator): 더하기, 빼기와 같은 연산을 진행하는 키워드
#include <stdio.h>

int main(void)
{
    //[?] 식(Expression)
    printf("%d\n", 3 + 5); // 8
    printf("%d\n", 3 - 5); // -2

    //[?] 문(Statement) 
    printf("%d\n", 3 * 5); // 15
    printf("%d\n", 3 / 5); // 0

    return 0;
}
8
-2
15
0

3 + 5 형태를 식이라고 하고 일반적으로 세미콜론으로 구분되는 하나의 문장을 문이라고 합니다.

9.2 단항 연산자(Unary Operator)

단항 연산자는 하나의 연산자로 식을 처리합니다. 단항 연산자의 가장 기본인 + 연산자와 - 연산자를 먼저 살펴보겠습니다. + 연산자와 - 연산자는 부호 연산자라고도 합니다.

  • + 연산자: 특정 정수형 변수의 값을 그대로 출력합니다. 사실, 단항 연산자인 + 연산자는 아무런 기능을 하지는 않습니다.
  • - 연산자: 특정 정수형 변수의 값을 음수로 변경하여 출력합니다. 만약, 음수의 값이 들어 있다면 양수로 변환해서 반환해 줍니다.

9.2.1 단항 연산자 사용하기

이번에는 단항 연산자를 사용해보겠습니다.

코드: unary_operator.c

//[?] 단항 연산자(Unary Operator): +, -
#include <stdio.h>

int main(void)
{
    int value = 0;

    value = 8; // value에 8 대입
    value = +value; // value의 값에 + 기호로 붙여 있는 그대로 표현
    printf("%d\n", value); // +8

    value = -8; // value에 -8 대입
    value = +value; // value의 값에 + 기호를 붙여 있는 그대로 표현
    printf("%d\n", value); // -8

    value = 8; // value에 8 대입
    value = -value; // value의 값에 - 기호를 붙여 부호를 반대로 변경
    printf("%d\n", value); // -8

    value = -8; // value에 -8 대입
    value = -value; // value의 값에 - 기호를 붙여 부호를 반대로 변경
    printf("%d\n", value); // +8

    return 0;
}
8
-8
-8
8

+ 연산자는 변수의 값을 그대로 반환해 줍니다. 이와 달리 연산자는 변수의 값의 부호를 반대로 변경해 줍니다.

9.2.2 주소 연산자: &

특정 변수에 &(앰퍼샌드) 기호를 붙이면 해당 변수에 들어있는 값이 아닌 해당 변수가 컴퓨터 메모리상의 어느 주소에 저장되었는지를 알려주는 주솟값 자체를 알려줍니다. 이 값은 매번 실행할 때마다 달라질 수 있습니다. 지금은 변수 이름에 & 기호를 붙이면 값이 아닌 주소를 알려주는 내용만 기억합니다.

코드: address_operator.c

#include <stdio.h>

int main(void)
{
    int number = 1234;

    printf("number 변수에 들어 있는 값: %d, number 변수의 주솟값: %p\n"
        , number, &number); // 주소는 계속 변경됨

    return 0;
}
number 변수에 들어 있는 값: 1234, number 변수의 주솟값: 00AFFA94

변수의 주소를 출력할 때에는 서식 지정자로 %d 보다는 %p를 사용합니다.

9.3 변환 연산자: 소괄호 기호를 사용하여 데이터 타입 변환

() 기호를 사용하여 특정 값을 원하는 데이터 타입으로 변환할 수 있습니다. (int)3.14 형태를 사용하면 실수 리터럴인 3.14를 정수형으로 변환해서 3을 반환해 줍니다.

변환 연산자를 사용해 보겠습니다.

코드: casting_operator.c

#include <stdio.h>

int main(void)
{
    int number = (int)3.14; // 3.14를 정수(int)로 변환
    printf("%d\n", number); // 3

    return 0;
}
3

실수 데이터 타입인 3.14를 (int)를 붙여 정수 데이터 타입 변수에 담았습니다.

변환 연산자는 (long), (double) 형태로도 사용됩니다.

long number = (long)3.141592;
double number = (double)3.141592;

9.4 산술 연산자(Arithmetic Operator)

이번에는 사칙역산을 할 수 있는 방법을 알아보겠습니다. C 언어에서는 사칙연산을 위해서 산술 연산자(Arithmetic Operator)를 제공합니다. 산술 연산자는 더하기(Add), 빼기(Subtract), 곱하기(Multiply), 나누기(Divide), 나머지(Remainder, Modulus)의 수학적 연산을 하는데 사용됩니다.

산술 연산자는 영어로 Mathematical 연산자로도 표현합니다.

산술 연산자는 다음과 같이 5가지 종류가 있습니다.

+ (더하기), - (빼기), * (곱하기), / (나누기), % (나머지)

다음은 산술 연산자 사용 예입니다.

연산자 의미 설명
A + B 더하기 A와 B를 더한 결과를 반환합니다.
A - B 빼기 A에서 B를 뺀 결과를 반환합니다.
A * B 곱하기 A와 B를 곱한 결과를 반환합니다.
A / B 나누기 A를 B로 나눈 결과를 반환합니다.
A % B 나머지 A를 B로 나눈 후, 몫이 아닌 정수형 나머지 값을 반환합니다.

다음 샘플 코드는 + 연산자를 사용하여 더한 값을 출력한 내용입니다.

코드: plus_operator.c

#include <stdio.h>

int main(void)
{
    int i = 10;
    int j = 20;
    int k = i + j; // k = 10 + 20
    printf("%d\n", k); // 30

    return 0;
}
30

9.4.1 더하기 연산자: +

먼저, 더하기 연산자를 사용해보겠습니다.

코드: operator_add.c

//[?] 더하기(+) 연산자
#include <stdio.h>

int main(void)
{
    int i = 10;
    int j = 20;
    int k = i + j; // k = 10 + 20
    printf("%d\n", k); // 30

    return 0;
}
30

k 변수에는 ij 변수에 있는 값을 더한 후 그 결괏값을 저장합니다. 10과 20의 합을 더한 결괏값인 30이 k에 저장되어 출력됩니다.

9.4.2 빼기 연산자: -

이번에는 빼기 연산자를 사용해보겠습니다. 정수와 마찬가지로 산술 연산자는 실수도 동일하게 산술연산을 처리합니다. 실수 데이터를 저장할 수 있는 float 형식은 3.14f 형태처럼 f를 접미사로 붙여서 초기화 합니다.

코드: operator_subtract.c

//[?] 빼기(-) 연산자
#include <stdio.h>

int main(void)
{
    float i = 3.14f;
    float j = 3.14f;
    float k = i - j; // k = 3.14 - 3.14

    printf("%f\n", k); // 0.000000

    return 0;
}
0.000000

빼기(-) 연산자를 사용하면 정수 또는 실수 데이터 타입의 변수를 빼는 기능을 합니다. k = i - j; 코드에 의해서 i 값에서 j 값을 뺀 결괏값이 k에 담깁니다.

9.4.3 곱하기 연산자: *

이번에는 곱하기 연산자를 사용해보겠습니다.

코드: operator_multiply.c

//[?] 곱하기(*) 연산자
#include <stdio.h>

int main(void)
{
    long i = 100;
    long j = 200;
    long k = i * j; // k = 100 * 200

    printf("%ld\n", k); // 20000

    return 0;
}
20000

곱하기(*) 연산자는 키보드의 * 기호를 사용합니다. k = i * j; 코드에 의해서 i 값과 j 값을 곱한 결괏값이 k에 담깁니다.

9.4.4 나누기 연산자: /

이번에는 나누기 연산자를 사용해보겠습니다.

코드: operator_divide.c

//[?] 나누기(/) 연산자
#include <stdio.h>

int main(void)
{
    double i = 1.5;
    double j = 0.5;
    double k = i / j; // k = 1.5 / 0.5

    printf("%lf\n", k); // 3.000000

    return 0;
}
3.000000

수학에서 사용하는 나누기 기호는 키보드에 없기 때문에 슬래시(/) 기호를 사용하여 나누기 기능을 구현합니다. k = i / j; 코드에 의해서 i 값에 j 값을 나눈 결괏값이 k에 담깁니다.

참고로, 나누기 연산은 0으로 나눌 수 없습니다.

9.4.5. 나머지 연산자: %

C 언어에서 퍼센트(%) 기호를 사용하는 나머지 연산자는 나머지 연산의 결과 중 몫이 아닌 나머지를 구해주는 연산자입니다.

참고로, 나머지 연산자는 모듈러스 또는 모듈로 연산자로 발음합니다.

코드: remainder.c

// remainder.c
//[?] 나머지 연산자(Remainder Operator): 몫이 아닌 나머지 값 구하기
#include <stdio.h>

int main(void)
{
    int first = 5;
    int second = 3;
    int result = 0;

    result = first % second; // 5 / 3 => 나머지 값인 2를 반환

    printf("나머지 값: %d\n", result); // 몫: 1, 나머지: {2}

    return 0;
}
나머지 값: 2

이번에는 나머지 연산자를 사용해보겠습니다.

코드: operator_remainder.c

//[?] 나머지(%) 연산자
#include <stdio.h>

int main(void)
{
    int i = 5;
    int j = 3;
    int k = i % j; // k = 5 % 3
    printf("%d\n", k); // 2
}
2

k = i % j; 코드에 의해서 i 값에 j 값을 나눈 후 나머지 값이 k에 담깁니다. 나머지 연산자의 결괏값이 0인 경우는 나눈 수로 정확히 나누어 떨어진다는 것을 의미하여 짝수 또는 홀수 등 특정 수의 배수를 찾을 때 유용하게 사용할 수 있습니다. 예를 들어 모든 수를 2로 나누었을 때 나머지가 0이면 짝수를 의미하고 나머지가 1이면 홀수를 의미하는데 이러한 식을 구현할 때 나머지 연산자(%)가 사용됩니다.

참고로, 다음과 같은 식으로 나머지 연산자없이 나머지 값을 구할 수도 있습니다.

r = x – (x / y) * y

나머지 연산자에 대한 내용을 한번 더 살펴보겠습니다.

코드: percent_operator.c

// percent_operator.c
#include <stdio.h>

int main(void)
{
    int f = 10;
    int s = 5;
    int r = f % s; // r 변수에는 (f / s) 결과의 나머지 값이 저장
    printf("%d %% %d = %d\n", f, s, r);

    return 0;
}
10 % 5 = 0

f % s 식에 의해서 10 % 5가 되는데 몫은 2이고 나머지는 0이 됩니다. 이 때 나머지 값인 0r 변수에 담깁니다.

9.4.6 산술 연산자 전체 사용하기

간단하게 2개의 변수를 이용해서 산술 연산을 하는 프로그램을 작성해보겠습니다. 특히 나머지 값을 구해주는 % 연산자를 주의 깊게 살펴보겠습니다.

코드: operator_arithmetic.c

// operator_arithmetic.c
// +, -, *, /, %
#include <stdio.h>

int main(void)
{
    int a = 5;
    int b = 3;

    printf("%d\n", a + b); // 더하기: 8
    printf("%d\n", a - b); // 빼기: 2
    printf("%d\n", a * b); // 곱하기: 15
    printf("%d\n", a / b); // 몫: 1  
    printf("%d %% %d = %d\n", a, b, (a % b)); // 나머지: 5 % 3 = 2

    return 0;
}
8
2
15
1
5 % 3 = 2

일상적인 생활과는 달리 나머지를 구하는 % 연산자는 프로그램 코드에서는 자주 나타나는 연산자입니다.

9.5. 2개의 숫자를 콘솔로부터 입력 받은 후 산술 연산 값 출력하기

2개의 숫자를 콘솔로부터 입력 받은 후 산술 연산을 진행하는 코드를 작성하겠습니다.

코드: scanf_arithmetic.c

// 2개의 숫자를 콘솔로부터 입력받은 후 산술 연산 값 출력하기
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>

int main(void)
{
    int x, y, _;

    printf("2개의 정수를 입력하세요: ");
    _ = scanf("%d %d", &x, &y);

    printf("%d + %d = %d\n", x, y, (x + y));
    printf("%d - %d = %d\n", x, y, (x - y));
    printf("%d * %d = %d\n", x, y, (x * y));
    printf("%d / %d = %d\n", x, y, (x / y));
    printf("%d %% %d = %d\n", x, y, (x % y));

    return 0;
}
2개의 정수를 입력하세요: 3 5
3 + 5 = 8
3 - 5 = -2
3 * 5 = 15
3 / 5 = 0
3 % 5 = 3

C 프로그래밍에서 정수 나눗셈의 정밀도 문제 이해하기

이 글에서는 정수 나눗셈을 실수형 변수에 저장할 때 발생하는 정밀도 손실 문제를 예시 코드를 통해 설명하고, 이를 해결하기 위한 방안을 제시하겠습니다.

초기 코드 분석

다음은 C 언어로 작성된 초기 코드 예시입니다:

int main(void)
{
   int dividend = 3, divisor = 4;
   double quotient;
   quotient = dividend / divisor; 
   printf("Division result: %f \n", quotient);

   return 0;
}

예상 출력 및 문제점

이 코드에서는 두 정수 dividend (피제수)와 divisor (제수)를 나누고, 그 결과를 실수형 변수 quotient에 저장합니다. 그러나 dividend / divisor는 두 변수 모두 정수형이기 때문에 정수 나눗셈이 수행됩니다. 3 / 4는 정수 결과로 0을 반환하므로, quotient에는 0.0이 저장되며, 출력 결과는 "Division result: 0.000000"입니다. 이는 소수점 이하의 정밀한 결과를 얻을 수 없는 문제가 있습니다.

개선된 코드와 해결 방안

문제를 해결하기 위해서 나눗셈 연산 중 하나의 피연산자를 실수형(double 또는 float)으로 캐스팅하여 실수 나눗셈으로 변경하였습니다. 개선된 코드는 다음과 같습니다:

int main(void)
{
   int dividend = 3, divisor = 4;
   double quotient;
   quotient = (double)dividend / divisor;  // 개선된 부분
   printf("Division result: %f \n", quotient);

   return 0;
}

이 변경으로 quotient0.75로 계산되며, 출력 결과는 "Division result: 0.750000"입니다. 이제 코드는 정수 나눗셈이 아닌 실수 나눗셈을 수행하여 소수점 이하의 값을 정확히 반영할 수 있습니다.

9.6. 장 요약

이번 강의는 단항 연산자인 +, - 그리고 산술 연산자인 +, -, *, /, % 연산자에 대해 살펴보았습니다. 계속해서 추가적인 연산자들을 학습해나가겠습니다.

정보처리기능사 실기 문제: 두 정수의 합 계산하기

다음은 C 언어를 사용한 프로그래밍 문제입니다. 이 문제는 사용자로부터 두 개의 정수를 입력받아, 그 합을 출력하는 프로그램을 작성하는 것을 목표로 합니다. 문제를 해결하기 위해 기본적인 입력 및 출력 함수인 scanfprintf를 사용합니다.

문제: 사용자로부터 두 개의 정수를 입력받아, 두 수의 합을 계산하고 결과를 출력하는 C 프로그램을 작성하세요.

#include <stdio.h>

main()
{
    int i, j, k;
    // 사용자로부터 두 정수 입력받기
    scanf("%d %d", &i, &j);
    // 입력받은 두 정수의 합 계산
    k = i + j;
    // 계산된 합 출력
    printf("%d\n", k);
}

해결 방법:

  1. #include <stdio.h>를 통해 표준 입출력 라이브러리를 포함합니다.
  2. main 함수를 선언합니다. 이 프로그램의 실행 시작점입니다.
  3. 세 개의 정수형 변수 i, j, k를 선언합니다. 여기서 ij는 사용자로부터 입력받을 두 정수를 저장하고, k는 이들의 합을 저장하는 데 사용됩니다.
  4. scanf 함수를 사용하여 사용자로부터 두 정수 i, j를 입력받습니다.
  5. 입력받은 두 정수의 합을 변수 k에 저장합니다.
  6. printf 함수를 사용하여 계산된 합 k를 출력합니다.

입력 예시: 5 10 출력 예시: 15

이 문제는 기본적인 C 언어 프로그래밍 능력을 평가하기 위한 것으로, 변수 선언, 표준 입력 및 출력을 다루는 방법을 이해하는지를 확인하는 데에 목적이 있습니다.

문제 풀이

정보처리기능사 실기 문제: 두 수의 합 계산

이 문제에서는 C 언어를 사용하여 사용자로부터 두 개의 정수를 입력받고, 이 두 수의 합을 계산하여 출력하는 프로그램을 작성하는 것이 목표입니다. 사용자 입력을 처리하고 기본적인 산술 연산을 수행하는 능력을 평가합니다.

#include <stdio.h>

int main(void)
{
    int a, b, sum;
    scanf("%d %d", &a, &b); // 사용자로부터 두 정수 입력받기
    sum = a + b; // 입력받은 두 수의 합 계산
    printf("%d", sum); // 계산된 합 출력
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다. 이를 통해 입력과 출력을 처리할 수 있습니다.
  2. main 함수를 정의합니다. 프로그램의 실행 시작점을 나타냅니다.
  3. 두 개의 정수 변수 a, b와 이들의 합을 저장할 변수 sum을 선언합니다.
  4. scanf 함수를 사용하여 사용자로부터 두 개의 정수를 입력받습니다. 이 때, %d %d 형식 지정자를 사용하여 두 정수가 공백으로 구분되어 입력될 것을 지정합니다.
  5. 입력받은 두 수를 더하여 sum 변수에 저장합니다.
  6. printf 함수를 사용하여 sum 변수의 값을 출력합니다. 이는 두 수의 합을 나타냅니다.

이 문제는 사용자 입력 처리와 기본적인 산술 연산을 수행하는 방법, 그리고 결과를 출력하는 과정을 포함하며, C 언어 프로그래밍의 기초적인 부분을 다룹니다.

정보처리산업기사 실기 시험 기출 문제 - 진법 변환과 정수 연산

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: number_systems_and_arithmetic.c

#include <stdio.h>

main()
{
    int j = 024, k = 24, L = 0x24, hap;
    hap = j + k + L;
    printf("%d, %d, %d, %d\n", j, k, L, hap);
}

입력 예시

이 프로그램은 입력을 받지 않습니다.

출력 예시

20, 24, 36, 80

해설

이 프로그램은 다양한 진법으로 표현된 정수를 선언하고, 이들의 합을 계산하여 출력합니다.

  • int j = 024;는 8진법으로 표현된 정수입니다. 10진수로는 20입니다.
  • int k = 24;는 10진법으로 표현된 정수입니다. 그대로 24입니다.
  • int L = 0x24;는 16진법으로 표현된 정수입니다. 10진수로는 36입니다.
  • hap = j + k + L; 계산 결과는 20 + 24 + 36 = 80이 됩니다.
  • printf("%d, %d, %d, %d\n", j, k, L, hap);는 각 변수의 값을 10진수로 변환하여 출력합니다. 결과는 20, 24, 36, 80입니다.

진법 변환 과정 설명:

  • 8진법: 024를 10진수로 변환하기 위해, 2*8^1 + 4*8^0 = 16 + 4 = 20.
  • 16진법: 0x24를 10진수로 변환하기 위해, 2*16^1 + 4*16^0 = 32 + 4 = 36.

이 예제는 다양한 진법에서 숫자를 해석하고, 이를 통합하여 연산을 수행하는 방법을 보여줍니다.

정보처리기사 실기 시험 기출 문제 - 연산자 활용

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: operator_usage.c

#include <stdio.h>

main()
{
    int i = 10, j = 10, k = 30;
    i /= j;
    j -= i;
    k %= j;
    printf("%d, %d, %d\n", i, j, k);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

1, 9, 3

해설

이 프로그램은 다양한 할당 연산자를 사용하여 변수의 값을 계산하고, 그 결과를 출력합니다.

  1. 초기에 i, j, k 변수는 각각 10, 10, 30으로 초기화됩니다.
  2. i /= j; 연산은 ij로 나눈 후 그 결과를 i에 할당합니다. 따라서 i의 값은 1이 됩니다.
  3. j -= i; 연산은 j에서 i를 뺀 후 그 결과를 j에 할당합니다. 따라서 j의 값은 9가 됩니다.
  4. k %= j; 연산은 kj로 나눈 나머지를 k에 할당합니다. 따라서 k의 값은 3이 됩니다.
  5. printf("%d, %d, %d\n", i, j, k);는 계산된 i, j, k의 값을 출력합니다.

이 프로그램은 할당 연산자(/=, -=, %=)를 활용하여 간단한 수치 연산을 수행하고 결과를 출력하는 방법을 보여줍니다.

정보처리기사 실기 시험 기출 문제 - 화폐 단위별 개수 계산

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: currency_count.c

#include <stdio.h>

main() {
    int m = 4620;
    int a = m / 1000;
    int b = m % 1000 / 500;
    int c = m % 500 / 100;
    int d = m % 100 / 10;
    printf("1000원의 개수 : %d\n", a);
    printf("500원의 개수 : %d\n", b);
    printf("100원의 개수 : %d\n", c);
    printf("10원의 개수 : %d\n", d);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

1000원의 개수 : 4
500원의 개수 : 1
100원의 개수 : 2
10원의 개수 : 2

해설

이 프로그램은 주어진 금액(4620원)을 화폐 단위별로 나누어 필요한 각 화폐의 개수를 계산하고 출력합니다.

  1. 변수 m은 주어진 총 금액을 나타냅니다.
  2. 변수 a는 1000원짜리 지폐의 개수를 계산합니다.
  3. 변수 b는 남은 금액 중 500원짜리 동전의 개수를 계산합니다.
  4. 변수 c는 그 다음으로 남은 금액 중 100원짜리 동전의 개수를 계산합니다.
  5. 변수 d는 마지막으로 남은 금액 중 10원짜리 동전의 개수를 계산합니다.
  6. printf 함수를 사용하여 각 화폐 단위별 개수를 출력합니다.

이 프로그램은 주어진 총 금액을 효과적으로 화폐 단위별로 나누어 개수를 계산하는 방법을 보여줍니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com