JavaScript는 동적 언어로, 객체 지향, 명령형, 선언형(예: 함수형 프로그래밍) 스타일을 지원해요.
JavaScript에서 이름에 값을 할당하는 방법은 크게 몇 가지가 있어요. 변수나 상수를 사용하는 거예요. Exercism에서는 변수를 항상 camelCase로 쓰고, 상수는 SCREAMING_SNAKE_CASE로 써요. 따라야 할 공식 가이드는 없고, 회사나 조직마다 다양한 스타일 가이드를 사용해요. 변수는 원하는 방식으로 자유롭게 작성해도 돼요. 연습 문제에서 준비한 방식대로 작성하면, 웹 인터페이스와 대부분의 IDE에서 다르게 강조 표시된다는 장점이 있어요.
JavaScript에서 변수는 const, let, var 키워드로 정의할 수 있어요.
let이나 var를 사용하면 변수는 생명 주기 동안 여러 값을 참조할 수 있어요.
예를 들어 myFirstVariable은 할당 연산자 =를 사용해 여러 번 정의하고 다시 정의할 수 있어요:
let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();
let과 var와 달리, const로 정의한 변수는 한 번만 할당할 수 있어요.
JavaScript에서는 이 방법으로 상수를 정의해요.
const MY_FIRST_CONSTANT = 10;
// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.
💡 이후 개념 연습 문제에서 상수 할당, 상수 바인딩, 상수 값의 차이를 살펴보고 설명해요.
JavaScript에서는 기능 단위를 _함수_로 캡슐화하고, 보통 함께 속한 함수들은 같은 파일에 모아 둬요.
이런 함수는 매개변수를 가지고(그래서 인자를 받을 수 있어요), return 키워드로 값을 _반환_할 수 있어요.
함수는 () 문법으로 호출해요.
function add(num1, num2) {
return num1 + num2;
}
add(1, 3);
// => 4
이 예제에서 함수 이름은 add예요.
이 함수는 num1과 num2, 두 개의 매개변수를 가져요.
그리고 값을 반환해요. 바로 num1 + num2 표현식의 결과예요.
그다음 함수 add는 두 개의 인자 1과 3을 사용해 _호출_돼요.
함수의 결과, 즉 반환된 값은 4예요.
💡 JavaScript에서는 함수를 선언하는 방법이 매우 다양해요.
이 중 몇 가지는 function 키워드를 사용하는 방식과 달라 보여요.
이 트랙에서는 그것들을 점진적으로 소개하려고 하지만, 이미 알고 있다면 어떤 방법을 써도 괜찮아요.
대부분의 경우 한쪽을 쓰는 게 더 낫거나 나쁘지 않아요.
function, 상수, 변수를 _다른 파일_에서 사용할 수 있게 하려면 export 키워드를 사용해 내보내야 해요.
그러면 다른 파일에서 import 키워드로 이것들을 가져올 수 있어요.
이것을 모듈 시스템이라고도 해요.
좋은 예로 모든 테스트가 동작하는 방식을 들 수 있어요.
각 연습 문제에는 최소한 하나의 파일이 있고, 예를 들어 lasagna.js에는 _구현_이 들어 있어요.
_구현_은 파일에서 export되어, 다른 파일에서 import할 수 있게 돼요.
또한 최소한 하나의 다른 파일, 예를 들어 lasagna.spec.js에는 _테스트_가 들어 있어요.
이 파일은 구현을 테스트하기 위해 공개된(즉 export된) 요소들을 import해요:
// file.js
export const MY_VALUE = 10;
export function add(num1, num2) {
return num1 + num2;
}
// file.spec.js
import { MY_VALUE, add } from './file';
add(MY_VALUE, 5);
// => 15
루시안의 여자친구가 집으로 돌아오는 길인데, 루시안은 아직 기념일 저녁 식사를 만들지 않았어요!
이 연습 문제에서는 루시안이 가장 좋아하는 요리책에 나오는 근사한 라자냐를 만들 수 있도록 코드를 작성해 볼 거예요.
라자냐를 만드는 데 걸리는 시간과 관련된 네 가지 과제가 있어요.
라자냐를 오븐에 몇 분 동안 넣어 둬야 하는지를 나타내는 EXPECTED_MINUTES_IN_OVEN 상수를 정의해요. 이 상수는 내보내야 해요. 요리책에 따르면 예상 오븐 시간은 40분이에요.
remainingMinutesInOven 함수를 구현해요. 이 함수는 라자냐를 오븐에 넣어 둔 실제 시간(분)을 _매개변수_로 받아서, 이전 과제의 **예상 오븐 시간(분)**을 기준으로 라자냐가 오븐에 앞으로 몇 분 더 있어야 하는지를 _반환_해요.
remainingMinutesInOven(30);
// => 10
preparationTimeInMinutes 함수를 구현해요. 이 함수는 라자냐에 추가한 층의 개수를 _매개변수_로 받아서, 층 하나를 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 몇 분을 썼는지를 _반환_해요.
preparationTimeInMinutes(2);
// => 4
totalTimeInMinutes 함수를 구현해요. 이 함수는 _매개변수 두 개_를 받아요. numberOfLayers 매개변수는 라자냐에 추가한 층의 개수이고, actualMinutesInOven 매개변수는 라자냐를 오븐에 넣어 둔 시간(분)이에요. 이 함수는 라자냐를 만드는 데 총 몇 분을 작업했는지를 _반환_해야 해요. 이는 준비 시간(분)과 현재까지 라자냐가 오븐에 있던 시간(분)을 더한 값이에요.
totalTimeInMinutes(3, 20);
// => 26
Exercism에 가입하고 JavaScript 트랙을 개념 37개연습 문제 159개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.