정수 제곱근 판별
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
//Reference Code ( for )
function solution(n) {
let answer = -1;
for( let i = 1; i * i <= n; i++ ) {
if( i * i === n ) {
// 제곱근을 찾은 경우 (제곱의 값이 n과 동일한 경우)
answer = i + 1;
return answer * answer
// answer ** 2 -- 거듭제곱 연산자
// Math.pow( answer, 2 ) -- 제곱 메소드
}
}
// 제곱근을 찾지 못한 경우 (-1 을 리턴)
return answer;
}
//Reference Code ( Math.sqrt, Number.isInteger )
function solution(n) {
let sqrt = Math.sqrt(n);
if( Number.isInteger( sqrt ) === true ) {
// 제곱근일 경우 (= 정수인 경우) true 반환
sqrt++;
return sqrt * sqrt;
} else {
// 제곱근이 아닐 경우 (= 정수가 아닐 경우) false 반환
return -1;
}
}
제일 작은 수 제거하기
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
//Reference Code ( for 반복문 )
function solution(arr) {
const answer = [];
// 1. 제일 작은 수 찾기
let min = arr[0];
for( let i = 1; i < arr.length; i++ ) {// 0번째는 이미 min이 할당되어 1부터 반복
if(arr[i] < min) {
min = arr[i];
}
}
// 2. 제일 작은 수를 제외한 숫자만 배열에 추가
for( let i = 0; i < arr.length; i++ ) {
if(arr[i] !== min) {
answer.push( arr[i] )
}
}
// 빈 배열인지를 체크한 후
// 빈 배열일 경우에는 배열에 -1을 담아서 리턴
// 빈 배열이 아닐 경우에는 2번째 과정의 배열을 리턴
return answer.length === 0 ? [-1] : answer;
}
//Reference Code ( filter )
function solution(arr) {
// 배열 안에서 제일 작은 값을 저장
const min = Math.min(...arr);
const answer = arr.filter( num => {
return num !== min
})
return answer.length === 0
? [-1]
: answer
}
특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀로, 객체를 정의하기 위한 상태(멤버 변수)와 메서드(함수)로 구성
// index.js
class Monster {
power = 10; // let, const 사용X
constructor(aaa) {
this.power = aaa; //this는 Monster class를 의미
}
attack = () => {
console.log("공격하자!!");
console.log("내 공격력은 " + this.power + " 이야!!!");
};
run = () => {
console.log("도망가자!!");
};
}
const mymonster1 = new Monster(10);
mymonster1.attack();
mymonster1.run();
const mymonster2 = new Monster(50);
mymonster2.attack();
mymonster2.run();
constructor()
생성자를 사용하여 초기값을 생성mymonster2
는 넘겨받은 인수와 함께 constructor
가 자동으로 실행this.power
에 할당해 줌으로써 초기값이 다시 생성//output
공격하자!
내 공격력은 10이야!!
도망가자!!
공격하자!!
내 공격력은 50이야!!
도망가자!!
extends
: 같은 기능들을 사용할 때 코드의 효율성을 높이기 위해 중복되는 코드들을 최소화
// index.js
class Monster { //공통 기능
power = 10
constructor(aaa){
this.power = aaa
}
attack = () => {
console.log("공격하자!!")
console.log("내 공격력은 " + this.power + " 이야!!!")
}
}
class SkyMonster extends Monster { // 공통 기능을 상속받음
constructor(qqq){
super(qqq) // 부모 오브젝트의 함수 호출
}
run = () => {
console.log("날라서 도망가자!!")
}
}
class GroundMonster extends Monster {// 공통 기능을 상속받음
constructor(www){
super(www)
}
run = () => {
console.log("뛰어서 도망가자!!")
}
}
const mymonster1 = new SkyMonster(30)
mymonster1.attack()
mymonster1.run()
const mymonster2 = new GroundMonster(10)
mymonster2.attack()
mymonster2.run()
super
: 부모 오브젝트의 함수를 호출할 때 사용
=> 생성자 constructor는 동일하게 사용할 수 있지만, power 변수가 상속해 준 Monster 내부에 존재하기에 Monster class 내부에 있는 constructor로 인수를 넘겨 주기 위해 사용
this
키워드를 사용할 수 있음. 그렇지 않을 경우 참조오류가 발생구글링하기
사물들의 공통적인 특징, 즉 추상된 특징을 파악해 인식의 대상으로 삼는 행위
하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것
기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의
기존 클래스의 기능을 가져와 재사용할 수 있으면서도 새로운 기능을 추가할 수 있음
=>다형성을 확보 가능
상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해줌
즉, 다형성은 형태가 같은데 다른 기능을 하고 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
오버라이딩(Overriding)
- 부모 클래스에서 상속받은 자식 클래스에서 부모 클래스에서 만들어진 메서드를 자신의 입맛대로 다시 재정의해서 사용하는 것
오버로딩(Overloading)
- 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념
- 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용
애플리케이션의 부수효과(side effect)를 방지 하고 상태 변이(mutation of state)를 감소 하기 위해 데이터의 제어 흐름과 연산을 추상(abstract) 하는 것
### 1. 1급 객체
함수의 파라미터로 함수 전달
함수의 반환값으로 함수 사용
데이터 변경이 필요한 경우, 데이터 복사본을 만들어 사용하여 작업을 진행
동일한 인풋에 항상 같은 값의 아웃풋 반환