JavaScript에서 객체 리터럴은 가장 흔하게 사용되는 객체 생성 방식입니다. 객체 리터럴을 사용하면 키와 값으로 구성된 프로퍼티를 갖는 객체를 쉽게 만들 수 있습니다. 이 방식은 {} 중괄호를 사용하여 객체를 직접 정의합니다.

객체 리터럴 생성

객체 리터럴은 중괄호 {} 안에 키: 값 쌍을 쉼표로 구분하여 나열함으로써 생성합니다. 키는 보통 문자열이고, 값은 어떤 JavaScript 데이터 타입도 될 수 있습니다(함수 포함).

 

예제:

const person = {
    name: "Alice",
    age: 25,
    isStudent: true,
    greet: function() {
        console.log('Hello, my name is ' + this.name);
    }
};

 

여기서 person 객체는 네 개의 프로퍼티를 가집니다:

  • name: 문자열
  • age: 숫자
  • isStudent: 불린
  • greet: 함수(메소드라고도 함)

프로퍼티 접근 방법

객체의 프로퍼티에 접근하기 위해서는 주로 두 가지 방법을 사용합니다: 점 표기법과 대괄호 표기법.

 

1. 점 표기법 (Dot notation)

  • 가장 일반적인 방법으로, 객체명.프로퍼티명을 사용하여 프로퍼티에 접근합니다.

예제:

console.log(person.name);  // "Alice"
person.greet();            // "Hello, my name is Alice"
const car = {
    make: "Toyota",
    model: "Corolla",
    year: 2021,
    displayInfo: function() {
        console.log(`Make: ${this.make}, Model: ${this.model}, Year: ${this.year}`);
    }
};
console.log(car.make);  // Toyota
console.log(car['model']);  // Corolla
car.displayInfo();  // Make: Toyota, Model: Corolla, Year: 2021

 

 

2. 대괄호 표기법 (Bracket notation)

  • 객체명['프로퍼티명']을 사용하여 접근합니다.
  • 프로퍼티 이름이 변수에 저장되어 있거나, 실행 시점에 결정되어야 하는 경우 유용합니다.

예제:

let property = 'name';
console.log(person[property]);  // "Alice"

property = 'age';
console.log(person[property]);  // 25

 

동적 프로퍼티 추가 및 삭제

JavaScript 객체는 유연하게 구성될 수 있습니다. 즉, 객체가 이미 생성된 후에도 새로운 프로퍼티를 추가하거나 기존 프로퍼티를 삭제할 수 있습니다.

  • 프로퍼티 추가
person.job = "Engineer";
console.log(person.job);  // "Engineer"

 

  • 프로퍼티 삭제
delete person.isStudent;
console.log(person.isStudent);  // undefined

 

예제:

const student = {
    name: "John",
    age: 22
};

// 새로운 프로퍼티 추가
student.major = "Computer Science";
console.log(student.major);  // Computer Science

// 프로퍼티 삭제
delete student.age;
console.log(student.age);  // undefined
const person = {
    firstName: "Emma",
    lastName: "Watson",
    fullName: function() {
        return `${this.firstName} ${this.lastName}`;
    },
    greet: function(greeting = "Hello") {
        console.log(`${greeting}, my name is ${this.fullName()}`);
    }
};

person.greet();  // Hello, my name is Emma Watson
person.greet("Hi");  // Hi, my name is Emma Watson

 

이러한 기능을 통해 객체는 프로그램 실행 중에 동적으로 변화하는 데이터를 효과적으로 관리할 수 있습니다. 객체 리터럴과 프로퍼티 접근 방법을 잘 이해하고 사용하는 것은 JavaScript 프로그래밍의 기본이며, 특히 웹 개발에서 중요한 역할을 합니다.

반복문 (for, while)

반복문은 코드의 특정 부분을 조건에 따라 여러 번 실행하도록 하는 구조입니다. JavaScript에서는 주로 for 반복문과 while 반복문을 사용합니다. 각 반복문의 사용법과 예제를 살펴보겠습니다.

1. for 반복문

for 반복문은 초기식, 조건식, 증감식을 한 곳에 모아 루프를 관리하는 데 사용됩니다. 이는 특히 배열이나 컬렉션을 순회할 때 유용합니다.

 

기본 구조

for (초기식; 조건식; 증감식) {
    // 조건식이 참인 동안 반복 실행할 코드
}

 

예제

// 1부터 5까지 숫자 출력
for (let i = 1; i <= 5; i++) {
    console.log(i);
}

 

이 예제에서 i는 1에서 시작해 5까지 1씩 증가하며, 각 단계에서 console.log(i)를 실행하여 숫자를 출력합니다.

 

배열 순회 예제

const fruits = ['apple', 'banana', 'orange'];

for (let i = 0; i < fruits.length; i++) {
    console.log(fruits[i]);
}

 

이 예제에서는 fruits 배열의 각 요소를 순회하면서 출력합니다.

2. while 반복문

while 반복문은 주어진 조건이 참(true)인 동안 코드 블록을 계속해서 실행합니다. 초기 조건이 거짓인 경우, 반복문은 단 한 번도 실행되지 않을 수 있습니다.

 

기본 구조

while (조건식) {
    // 조건식이 참인 동안 반복 실행할 코드
}

 

예제

let count = 1;

while (count <= 5) {
    console.log(count);
    count++;
}

 

이 예제에서 count는 1에서 시작하여 5 이하일 동안 반복 실행되고, 각 반복 후 count는 1씩 증가합니다.

 

do...while 반복문

do...while 반복문은 반복 실행할 코드를 최소 한 번 실행한 후 조건을 검사합니다.

let num = 1;

do {
    console.log(num);
    num++;
} while (num <= 5);

 

이 코드는 num이 5 이하일 동안 반복 실행되며, do 블록 안의 코드를 최소 한 번은 실행하게 됩니다.

 

반복문은 프로그래밍에서 자주 사용되며, 특히 데이터 처리, 자동화 작업, 게임 개발 등 다양한 영역에서 중요한 역할을 합니다. 코드를 간결하게 유지하면서도 필요한 작업을 여러 번 수행할 수 있도록 해줍니다. 다음 주제로 넘어가기 전에 이러한 반복문들을 확실히 이해하고 실습해 보시길 권장합니다.

실크로드1

 

안녕하세요, 빌드림입니다. 오늘은 실크로드에 대해 알아볼까요?

 

실크로드에 대해 상상해보세요. 수천 년 전, 세계의 여러 문화가 만나고 섞이는 곳이 있었습니다. 이곳은 단순한 길이 아니었습니다. 이곳은 아시아와 유럽을 잇는, 역사상 가장 중요한 교역 경로 중 하나였죠. 실크로드라고 불리는 이 길은 비단뿐만 아니라, 아이디어, 기술, 종교까지도 전 세계로 퍼져 나가는 통로였습니다. 이야기를 시작해 볼까요? 고대의 이 교역 경로가 어떻게 현대 문화에까지 영향을 미쳤는지, 실크로드의 신비로운 여정을 함께 따라가 보시죠.

 

실크로드는 단순히 길이 아니었습니다. 이것은 다양한 문화, 상품, 심지어 사상이 만나고 섞이는 교차점이었죠. 이 매혹적인 교역 경로는 아시아에서 유럽에 이르기까지 수천 킬로미터에 걸쳐 있었으며, 그 길 위에서는 역사적으로 중요한 교류가 일어났습니다. 실크로드를 통한 이 모든 교류는 결국 전 세계적인 변화를 촉발했습니다.

 

실크로드의 이름은 ‘비단(Silk)’에서 유래했습니다. 중국에서 생산된 비단은 그 아름다움과 질감으로 유명하여, 로마와 같은 서방 세계의 부유한 상류층 사이에서 큰 인기를 끌었죠. 하지만 실크로드를 통해 거래된 것은 비단뿐만이 아니었습니다. 향신료, 금속, 보석, 그리고 훨씬 더 중요한 것들—예를 들어, 종이와 화약 같은 발명품, 그리고 불교, 기독교, 이슬람 같은 종교—이 모든 것이 이 거대한 교역 경로를 따라 흘러갔습니다.

 

실크로드는 지리적으로도 다양했습니다. 중앙 아시아의 광활한 사막, 히말라야의 높은 산맥, 중동의 메소포타미아 평원을 포함하며, 이러한 지형들은 여행자와 상인들에게 큰 도전을 제공했습니다. 그러나 이러한 어려움에도 불구하고, 여러 문화권의 사람들이 서로 만나 교류하는 장을 만들었죠. 이런 교류의 결과로, 각 지역의 고유한 문화와 기술이 서로 영향을 미치며 발전할 수 있었습니다.

 

예를 들어, 중국의 종이와 인쇄술이 서방으로 전파되면서 유럽의 기록 보관과 지식 전달 방식에 혁명을 일으켰습니다. 이는 궁극적으로 르네상스의 지식 붐을 가능하게 했고, 유럽의 문화적 부흥에 크게 기여했습니다. 마찬가지로, 중동에서 발전된 수학과 천문학의 지식이 중앙 아시아를 거쳐 동아시아에 전달되었습니다.

 

실크로드2

 

실크로드는 또한 종교적 교류의 장이었습니다. 불교는 인도에서 중국으로, 그리고 한반도와 일본으로 퍼져 나갔습니다. 이슬람교도 중세 기간 동안 이 교역 경로를 따라 확산되었고, 여러 지역에 깊은 영향을 미쳤습니다. 이러한 종교적 영향은 사회 구조, 예술, 그리고 일상 생활에 깊이 스며들었습니다.

 

하지만 실크로드의 교류가 항상 평화로운 것만은 아니었습니다. 경제적 이익을 위한 경쟁, 영토 다툼, 종교적 갈등 등이 끊임없이 발생했습니다. 이러한 갈등은 때로는 국가 간의 전쟁으로 이어지기도 했죠. 그럼에도 불구하고, 실크로드를 통한 문화와 사상의 교류는 멈추지 않았습니다.

 

실크로드의 역사를 통해 우리는 한 가지 중요한 교훈을 배울 수 있습니다. 그것은 바로 서로 다른 문화와 사상이 만날 때, 충돌과 갈등뿐만 아니라 혁신과 발전의 기회도 생긴다는 것입니다. 실크로드는 이러한 교류를 통해 전 세계적인 변화를 가져왔고, 오늘날에도 그 정신은 여전히 우리 사회에 깊이 영향을 미치고 있습니다. 이 거대한 교역 경로가 없었다면, 우리의 세계는 지금과 매우 다를 것입니다. 실크로드는 단순한 무역 경로가 아니라, 문화와 지식, 사상이 만나고 섞이는 창조의 장이었던 것이죠.

 

후추전쟁1

 

 

후추전쟁은 우리가 흔히 사용하는 향신료, '후추'를 둘러싼 경제적, 군사적 갈등의 이야기입니다. 16세기에 들어서면서 이 작은 검은 알갱이가 유럽의 대국들 사이에서 엄청난 경쟁의 대상이 되었죠. 이 흥미진진한 역사 속으로 여러분을 안내하겠습니다.

 

1500년대 초, 유럽은 아시아에서 온 향신료에 매료되어 있었습니다. 특히 후추는 그 당시 가장 인기 있는 향신료였죠. 후추는 음식의 맛을 돋우는 데 사용되었을 뿐만 아니라, 보존제로서의 역할도 했기 때문에 매우 중요했습니다. 그러나 이 귀중한 향신료를 구하기 위해선 멀고 험난한 여정을 해야만 했고, 이는 후추를 둘러싼 국제적인 경쟁을 불러일으켰습니다.

포르투갈은 최초로 아시아로 직접 항해하여 후추를 유럽으로 가져온 국가입니다. 바스코 다 가마가 인도의 칼리컷에 도착하면서, 포르투갈은 후추 무역의 주도권을 잡기 시작했습니다. 포르투갈인들은 곧 지역 통치자들과의 협약을 통해 후추 무역의 독점권을 확보하고, 경쟁국을 배제하기 위해 군사적인 요새를 세우기 시작했습니다.

 

후추전쟁2

 

 

하지만 포르투갈의 독점은 그들의 라이벌인 네덜란드에 의해 도전받게 됩니다. 네덜란드는 1602년 네덜란드 동인도 회사를 설립하고, 아시아의 향신료 무역에 본격적으로 뛰어들었죠. 네덜란드는 포르투갈보다 훨씬 체계적이고 공격적인 접근 방식을 취했으며, 특히 후추의 주요 생산지인 인도네시아의 몰루카 제도를 중심으로 활동했습니다.

 

네덜란드는 몰루카 제도의 주민들과 계약을 맺고, 후추 생산을 독점하기 위해 포르투갈과의 여러 충돌을 불사했습니다. 이 과정에서 네덜란드는 포르투갈뿐만 아니라 현지 주민들과도 갈등을 빚으며, 때로는 무력을 사용하여 후추 무역을 통제했습니다. 이러한 강력한 통제 아래, 네덜란드는 유럽으로 흘러가는 후추의 대부분을 장악하게 되었고, 이로 인해 엄청난 부를 축적했습니다.

 

후추전쟁3

 

 

후추전쟁은 단순한 향신료 무역 이상의 의미를 지니며, 유럽 열강들의 식민 정책, 군사 전략, 그리고 국제 무역에서의 경쟁을 대변합니다. 이 전쟁을 통해 유럽의 대국들은 아시아 지역의 자원을 통제하기 위해 국가의 힘을 동원할 준비가 되어 있음을 보여주었습니다. 이로써 식민주의의 서막이 열리고, 아시아뿐 아니라 전 세계에 걸친 국제적 갈등의 씨앗이 뿌려지게 되었습니다.

 

후추전쟁은 그 자체로는 작은 충돌처럼 보일 수 있지만, 그 파급 효과는 세계 역사의 큰 흐름에 중대한 영향을 끼쳤습니다. 지금도 우리가 사용하는 후추 한 톨에 이렇게 거대한 역사의 무게가 실려 있는 것이지요. 이제 여러분도 후추를 볼 때마다 이 놀라운 역사를 떠올리게 될 것입니다.

JavaScript에서는 배열 외에도 여러 유형의 컬렉션을 제공하여 다양한 데이터 구조 요구사항을 충족시킵니다. 여기에는 Set, Map, WeakSet, WeakMap 등이 포함됩니다. 각각의 컬렉션과 그 사용 예를 살펴보겠습니다.

 

1. Set

Set 객체는 중복되지 않는 유일한 값들을 저장하는 컬렉션입니다. 주로 데이터의 유일성을 보장해야 할 때 사용됩니다.

예제

const mySet = new Set();

// 값 추가
mySet.add(1);
mySet.add(5);
mySet.add(5); // 중복된 값은 추가되지 않습니다.

console.log(mySet); // Set {1, 5}

// 값이 Set 내에 존재하는지 확인
console.log(mySet.has(1)); // true
console.log(mySet.has(3)); // false

// 값 제거
mySet.delete(5);
console.log(mySet); // Set {1}

// Set의 크기
console.log(mySet.size); // 1

 

2. Map

Map 객체는 키와 값의 쌍을 저장합니다. 기본적인 객체와 달리, 키로 다양한 타입의 값을 (함수, 객체, 기본 타입 등) 사용할 수 있습니다.

예제

const myMap = new Map();

// 키와 값의 쌍 추가
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');

console.log(myMap); // Map {'key1' => 'value1', 'key2' => 'value2'}

// 키로 값을 가져오기
console.log(myMap.get('key1')); // 'value1'

// 키의 존재 여부 확인
console.log(myMap.has('key2')); // true

// 키-값 쌍 제거
myMap.delete('key1');
console.log(myMap); // Map {'key2' => 'value2'}

// Map의 크기
console.log(myMap.size); // 1

 

3. WeakSet

WeakSet은 객체만을 멤버로 허용하며, 멤버들이 가비지 컬렉션의 대상이 될 수 있도록 약한 참조를 유지하는 컬렉션입니다. 이는 Set과 비슷하지만, 몇 가지 제한이 있습니다 (예: 모든 값이 객체여야 함).

예제

const weakSet = new WeakSet();
const obj1 = {};
const obj2 = {};

// 객체 추가
weakSet.add(obj1);
weakSet.add(obj2);

// 객체 존재 여부 확인
console.log(weakSet.has(obj1)); // true

// 객체 제거
weakSet.delete(obj2);
console.log(weakSet.has(obj2)); // false

 

4. WeakMap

WeakMap은 키가 반드시 객체여야 하며, 값은 임의의 타입이 될 수 있습니다. WeakMap 내의 키-값 쌍은 가비지 컬렉션에서 회수될 수 있는 약한 참조를 유지합니다.

예제

const weakMap = new WeakMap();
const obj1 = {};
const obj2 = {};

// 객체를 키로 사용하여 값 설정
weakMap.set(obj1, 'Hello');
weakMap.set(obj2, 'World');

// 키로 값 가져오기
console.log(weakMap.get(obj1)); // 'Hello'
console.log(weakMap.get(obj2)); // 'World'

// 키의 존재 여부 확인
console.log(weakMap.has(obj1)); // true

// 키-값 쌍 제거
weakMap.delete(obj1);
console.log(weakMap.has(obj1)); // false

 

이렇게 Set, Map, WeakSet, WeakMap는 각각의 사용 시나리오에 따라 선택적으로 사용할 수 있는 유용한 자료 구조들입니다. 각각의 특성을 이해하고 적절히 활용하는 것이 중요합니다.

 

안녕하세요, 빌드림입니다. 이번 시간에는 배열(Array)과 배열의 메소드에 대해서 알아보려고합니다.

 

배열과 배열의 메소드

배열은 JavaScript에서 여러 데이터를 순서대로 저장하는데 사용되는 데이터 구조입니다. 배열은 다양한 메소드를 제공하여 데이터의 추가, 삭제, 접근, 자르기 등 다양한 조작을 쉽게 할 수 있습니다. 여기서는 push, pop, slice, splice 같은 기본적인 배열 메소드들을 살펴보겠습니다.

1. push() 메소드

push() 메소드는 배열의 끝에 하나 이상의 요소를 추가하고, 변경된 배열의 길이를 반환합니다.

const fruits = ['apple', 'banana'];
fruits.push('orange');
console.log(fruits);  // 출력: ['apple', 'banana', 'orange']

 

2. pop() 메소드

pop() 메소드는 배열의 마지막 요소를 제거하고 그 요소를 반환합니다. 배열이 비어있으면 undefined를 반환합니다.

const fruits = ['apple', 'banana', 'orange'];
const lastFruit = fruits.pop();
console.log(lastFruit);  // 출력: 'orange'
console.log(fruits);  // 출력: ['apple', 'banana']

 

3. slice() 메소드

slice() 메소드는 배열의 일부분을 선택하여 새로운 배열로 반환합니다. 원본 배열은 변경되지 않습니다. slice(start, end)는 start 인덱스에서 시작하여 end 인덱스 바로 전까지의 요소들을 포함합니다.

const fruits = ['apple', 'banana', 'orange', 'mango'];
const citrus = fruits.slice(1, 3);
console.log(citrus);  // 출력: ['banana', 'orange']
console.log(fruits);  // 출력: ['apple', 'banana', 'orange', 'mango']

 

4. splice() 메소드

splice() 메소드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다. splice(start, deleteCount, item1, item2, ...)

const fruits = ['apple', 'banana', 'orange', 'mango'];
// index 2의 위치에서 1개의 요소를 제거하고 그 자리에 'lemon'과 'kiwi'를 추가
fruits.splice(2, 1, 'lemon', 'kiwi');
console.log(fruits);  // 출력: ['apple', 'banana', 'lemon', 'kiwi', 'mango']

 

이러한 배열 메소드들은 데이터를 관리하고 조작하는데 매우 유용합니다. 각 메소드는 특정 작업을 수행하기 위해 설계되었으며, 배열 작업을 효율적으로 처리할 수 있게 도와줍니다. 배열 메소드를 잘 이해하고 활용하면, 데이터 처리 작업을 더욱 쉽고 효과적으로 할 수 있습니다.

함수 표현식과 화살표 함수는 JavaScript에서 함수를 정의하는 두 가지 중요한 방법입니다. 각각의 특징을 이해하고 활용하는 예제를 통해 더 자세히 설명드리겠습니다.

 

함수 표현식 (Function Expression)

함수 표현식은 변수에 함수를 할당하여 사용합니다. 이 방식은 특히 익명 함수를 생성할 때 유용하며, 이벤트 핸들러나 콜백 함수로도 자주 사용됩니다.

기본 예제

const square = function(number) {
    return number * number;
};

console.log(square(4));  // 출력: 16

 

이 예제에서 square라는 이름의 변수에 함수를 할당하고 있습니다. 이 함수는 하나의 매개변수 number를 받아 그 제곱을 반환합니다.

 

콜백 함수로서의 사용

const numbers = [1, 2, 3, 4];
const squares = numbers.map(function(num) {
    return num * num;
});

console.log(squares);  // 출력: [1, 4, 9, 16]

 

map() 함수는 배열의 각 요소에 대해 주어진 함수를 실행하고, 결과를 새 배열로 반환합니다. 여기서 함수 표현식은 map()의 인자로 전달되었습니다.

 

화살표 함수 (Arrow Function)

ES6에서 도입된 화살표 함수는 더 짧은 문법을 사용하여 함수를 정의할 수 있게 해 줍니다. this의 바인딩 방식도 다르므로, 주로 콜백 함수에 사용될 때 this 관련 문제를 해결하는 데 도움이 됩니다.

기본 예제

const square = (number) => {
    return number * number;
};

console.log(square(5));  // 출력: 25

 

화살표 함수는 괄호 안에 매개변수를 정의하고, 화살표(=>)를 사용하여 함수 본체를 나타냅니다.

간결한 표현

화살표 함수는 더 간결하게 표현할 수 있습니다. 함수 본체가 한 줄의 표현식인 경우, 중괄호와 return 문을 생략할 수 있습니다.

const square = number => number * number;

console.log(square(6));  // 출력: 36

 

화살표 함수와 this

화살표 함수는 자신의 this를 가지지 않고, 자신을 감싸는 (lexical) 상위 컨텍스트의 this를 사용합니다. 이는 특히 객체의 메소드 안에서 콜백 함수로 사용될 때 유용합니다.

function Timer() {
    this.seconds = 0;
    setInterval(() => {
        this.seconds++;
        console.log(this.seconds);
    }, 1000);
}

new Timer();

 

이 예에서 setInterval의 콜백 함수로 화살표 함수를 사용하면, this는 Timer 인스턴스를 참조하게 됩니다. 전통적인 함수 표현식을 사용했다면 this가 setInterval을 호출하는 글로벌 객체(브라우저에서는 window)를 참조했을 것입니다.

 

이러한 예제들은 함수 표현식과 화살표 함수의 기본적인 사용 방법과 그들의 활용법을 보여 줍니다. JavaScript에서 함수를 효율적으로 사용하는 방법을 잘 이해하고 연습하는 것이 중요합니다.

 

안녕하세요, 빌드림입니다. 오늘은 JavaScript에서 함수의 정의와 호출에 대해서 배워보려고 합니다. 그럼 시작해볼게요.

 

함수의 정의와 호출

함수는 특정 작업을 수행하도록 설계된 코드의 집합입니다. 함수를 사용하면 코드의 재사용성을 높이고, 프로그램의 구조를 효율적으로 관리할 수 있습니다.

함수 정의

함수를 정의하는 방법에는 몇 가지가 있습니다. 가장 기본적인 방법은 function 키워드를 사용하는 것입니다.

 

1. 함수 선언문 (Function Declaration)

function greet() {
    console.log("Hello, World!");
}

 

이 방식은 함수를 선언하고, 이름을 붙여 정의합니다. 함수 선언문은 호이스팅되므로 코드의 어느 위치에 있든 호출할 수 있습니다.

 

2. 함수 표현식 (Function Expression)

const greet = function() {
    console.log("Hello, World!");
};

 

함수 표현식은 변수에 함수를 할당하는 방식으로 정의합니다. 이 방식은 호이스팅되지 않으며, 함수가 변수에 할당된 후부터 호출이 가능합니다.

 

3. 화살표 함수 (Arrow Function) - ES6 이후

const greet = () => {
    console.log("Hello, World!");
};

매개변수와 인자

함수는 매개변수를 통해 외부에서 값을 받을 수 있습니다. 매개변수는 함수 정의에 포함되며, 함수가 호출될 때 인자를 통해 값을 전달받습니다.

function greet(name) {
    console.log("Hello, " + name + "!");
}

greet("Alice");  // 출력: Hello, Alice!

 

이 예에서 name은 매개변수로, "Alice"는 인자입니다. 함수를 호출할 때 인자 "Alice"가 매개변수 name에 전달되어 사용됩니다.

함수를 통해 코드를 모듈화하고, 반복적인 작업을 효율적으로 처리할 수 있습니다. 또한, 함수는 복잡한 프로그램을 간단한 부분으로 나누어 문제를 쉽게 해결할 수 있게 도와줍니다. 다음으로는 배열의 기본적인 활용 방법에 대해 배울 예정입니다.

 

+ Recent posts