
객체: 속성 + 메소드
객체지향 프로그래밍 : 객체를 만들고 객체들의 상호 작용을 중심으로 개발하는 방법론
→객체 지향 프로그래밍 언어들은 클래스 라는 문법으로 객체를 효율적, 안전하게 만들어 객체 지향 패러다임을 쉽게 프로그래밍에 적용할 수 있도록 도와준다.
추상화 : 프로그램에 필요한 요소만 사용해서 객체를 표현
객체와 배열 조합하기
//객체를 선언한다.
const students = []
students.push({ 이름:'구름', 국어:87, 영어:98, 수학:88, 과학:70 })
students.push({ 이름:'별이', 국어:92, 영어:98, 수학:80, 과학:80 })
students.push({ 이름:'겨울', 국어:76, 영어:90, 수학:88, 과학:60 })
students.push({ 이름:'바다', 국어:98, 영어:90, 수학:80, 과학:90 })
//출력한다.
alert(JSON.stringify(students, null, 2))
JSON.stringify 객체를 JSON 문자열로 변환할때 사용하는 메소드
객체 활용하기 - 평균 구하기
//객체를 선언한다.
const students = []
students.push({ 이름:'구름', 국어:87, 영어:98, 수학:88, 과학:70 })
students.push({ 이름:'별이', 국어:92, 영어:98, 수학:80, 과학:80 })
students.push({ 이름:'겨울', 국어:76, 영어:90, 수학:88, 과학:60 })
students.push({ 이름:'바다', 국어:98, 영어:90, 수학:80, 과학:90 })
//출력한다.
let output = '이름\t총점\t평균\n' //\t 는 공백 삽입 띄어쓰기
for (const s of students) {
const sum = s.국어 + s.영어 + s.수학 + s.과학
const average = sum / 4
output += `${s.이름}\t${sum}점\t${average}점`\n`
}
console.log(output)
클래스 선언하기-클래스 이름 대문자 지정!
class 클래스 이름 { }
인스턴스(객체) : 이전에 만들었던 객체를 만드는 함수로 만든 객체와 비슷한 것, 클래스를 기반으로 생성하는 객체의미
new 클래스 이름 ( )
클래스 선언하고 인스턴스 생성하기
//클래스 선언
class Student {
}
//학생 선언
const student = new Student()
//학생 리스트를 선언
const students = [
new Student(),
new Student(),
new Student()
]
생성자: 클래스를 기반으로 인스턴스를 생성할 때 처음 호출하는 메소드
생상자에서는 속성을 추가하는 둥 객체의 초기화를 처리 한다.
class 클래스 이름 {
constructor ( ) {
/*생성자 코드 */
}}
상속: 어떤 클래스가 갖고 있는 유산(속성, 메소드) 을 기반으로 새로운 클래스를 만드는 것
유산을 주는 클래스를 부모 클래스 → 유산을 받는 클래스를 자식 클래스
class 클래스이름 extends 부모클래스 이름 {}
private 속성/메소드 는 클래스 내부에서만 접근할 수 있는 속성/메소드
사용자가 클래스 속성(또는 메소드)을 의도하지 않은 방향으로 사용하는 것을 막아 클래스의 안정성을 확보하기 위해 나온 문법이 private속성 과 메소드 이다.
class 클래스 이름 {
#속성 이름
#메소드 이름 () {
}
}
속성과 메소드 이름 앞에 #을 붙이기만 하면 된다.
#이 붙어있는 속성과 메소드는 모두 private 속성과 메소드가 된다. 주의 할 점은 사용하기 전에 미리 외부에 어떤 속성을 private 속성으로 사용하겠다고 선언해야함
게터 는 get**() 형태로 값을 확인하는 기능을 가진 메소드
세터 는 set**() 형태로 값을 지정하는 기능을 가진 메소드
class 클래스 이름 {
get 이름 () { return 값}
set 이름 (value) { }
}
static 속성과 static 메소드 (= 정적 속성, 정적 메소드)
디자인 패턴: *프레임워크 개발자들은 더 효율적으로 프레임워크를 개발할 수 있게 다양한 패턴을 고안
*프레임워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어
개발에 있어 하나의 뼈대 역할을 한다.
class 클래스 이름 {
static 속성= 값
static 메소드 () {
}
}
일반적인 변수와 함수처럼 사용
클래스 이름.속성
클래스 이름.메소드()
오버라이드: 부모가 갖고 있는 메소드와 같은 이름으로 메소드를 선언해서 덮어 쓰는 것을 의미
//사각형을 나타내는 클래스를 선언하고 사용
class Rectangle {
constructor(width, height) {
// 생성자함수
this.width = width;
this.height = height;
}
//사각형의 둘레를 구하는 메소드
getPerimeter() {
return 2 * (this.width + this.height);
}
//사각형의 넓이를 구하는 메소드
getArea() {
return this.width * this.height;
}
}
// 정사각형 클래스
class Square extends Rectangle {
//square클래스가 자식 클래스이다.
constructor(length) {
super(length, length); //부모의 생성자 함수를 호출하는 코드
}
}
//클래스 사용하기
const square = new Square(10, 20);
console.log(`사각형의 둘레: ${square.getPerimeter()}`);
console.log(`사각형의 넓이: ${square.getArea()}`);
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

function solution(a, b) {
let answer = 0;
if(a<=b) {
for(let i=a; i<=b; i++) {
answer += i
}
} else {
for(let i=b; i<=a; i++) {
answer+= i
}
}
return answer;
}
+다른 사람은 어떻게 풀었을까~?
function adder(a, b, s = 0){
for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
return s;
}