[TIL]221228 클래스

grace·2022년 12월 28일

TIL/WIL

목록 보기
15/37
post-thumbnail

What I Learned Today

🔥클래스

객체: 속성 + 메소드

객체지향 프로그래밍 : 객체를 만들고 객체들의 상호 작용을 중심으로 개발하는 방법론

→객체 지향 프로그래밍 언어들은 클래스 라는 문법으로 객체를 효율적, 안전하게 만들어 객체 지향 패러다임을 쉽게 프로그래밍에 적용할 수 있도록 도와준다.

추상화 : 프로그램에 필요한 요소만 사용해서 객체를 표현

객체와 배열 조합하기

//객체를 선언한다.
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 메소드 () {
	
	}
}

일반적인 변수와 함수처럼 사용

클래스 이름.속성
클래스 이름.메소드()

오버라이드: 부모가 갖고 있는 메소드와 같은 이름으로 메소드를 선언해서 덮어 쓰는 것을 의미


Code Snippets


//사각형을 나타내는 클래스를 선언하고 사용

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()}`);

Challenges Experienced


Algorithm

🙃문제

두 정수 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;
}
profile
미래의 개발자!

0개의 댓글