언어 9

[JS] 얕은 복사 & 깊은 복사

지난 시간에는 변수에 객체가 저장된 주소를 할당하는 참조에 대해 알아보았다. 이 경우 여러 변수가 같은 객체를 가리키므로 어느 한 변수에서 객체를 수정하면 이를 참조하는 다른 변수에도 영향을 미친다.let a = {'id': 1};let b = a; // 참조 복사console.log(a === b); // truea.id = 2;console.log(b.id); // 2이번 시간에는 객체의 주소를 복사하는 것이 아닌 새로운 객체를 만드는 두가지 복사 방법에 대해 알아보도록 한다.얕은 복사(Shallow copy)얕은 복사를 하면 참조 복사와 달리 원본 객체와 다른 주소에 할당된 객체를 가리키게 된다. 다만 객체 내부의 속성들은 원본 객체와 같은 속성을 참조한다.let original = {list: [..

[JS] 복제, 참조 그리고 함수의 매개변수

복제변수 a, b가 정수(원시 데이터 타입)인 경우를 살펴보자. 아래는 변수 b에 변수 a의 값을 복제한다. 즉 a와 b가 가리키는 주소가 다르므로, b의 값을 변경해도 a의 값은 그대로이다. 원시 데이터 타입과 참조 데이터 타입let a = 1; // a는 원시 타입let b = a; // b에 a의 값 복제 (원시 타입)b = 2; // b의 값 변경console.log(a); // 1 (a의 값은 그대로)참조이번에는 변수 a, b가 객체 (참조 데이터 타입)인 경우를 살펴보자. b에 a를 할당하게 되면 b는 a와 동일한 객체를 참조한다. 즉 b의 값을 바꾸면 a의 값도 바뀐다.let a = {'id': 1}; // a는 객체(참조 타입)let b = a; ..

[JS] 자바스크립트의 데이터 타입

원시 데이터 타입객체가 아닌 데이터 타입을 원시 데이터 타입(primitive type)이라고 한다. 다음 데이터 타입들이 원시 데이터 타입이다.숫자문자열불리언(true/false)nullundefinedSymbol참조 데이터 타입 (객체)자바스크립트에서 참조 데이터 타입은 객체(Object)를 의미한다.변수에 직접 값을 저장하는 것이 아니라, 메모리에서 객체가 저장된 위치를 가리키는(reference) 값으로 할당되기 때문에 "참조(reference) 데이터 타입"이라고 한다.배열(array), 함수(function)도 객체의 일종이다.Wrapper 객체원시 데이터 타입이지만 데이터를 사용할때 편리한 기능을 객체지향적으로 제공하기 위해, 원시 데이터 타입을 객체처럼 다룰 수 있도록 하는 레퍼 객체(Wr..

[Java] 상속

상속이란? 상속의 개념을 이해할 때 “상속”이라는 단어보다 코드에서 extends 라는 표현이 더 직관적인 것 같다. 상위 클래스를 유지하면서, 상위 클래스를 연장(extend)하여 하위 클래스를 만든다. 하위 클래스는 상위 클래스의 기능을 그대로 가져오면서 새로운 멤버(변수, 메소드)를 추가하거나, 기존의 메소드를 변경(overriding)할 수 있다. class Calculator1 { public int sum(int v1, int v2) { return v1 + v2; } } class Calculator2 extends Calculator1 { public int subtract(int v1, int v2) { return v1 - v2; } } Calculator2는 Calculator1을 e..

언어/Java 2023.08.22

[Java] final

추상(abstract) 이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제이다. final 필드 class Calculator { static final double PI = 3.24; } final로 지정된 필드(변수)에는 한번 값이 할당되면 그 값을 바꿀 수 없다. final 변수에 값을 재할당하면 컴파일 오류가 발생한다. final 메소드 final 메소드를 상속하려 하면 컴파일 오류가 발생한다. class A { final void b() {} } class B { void b() {} // error: overridden method is final } final 클래스 final 클래스를 상속하려고 하면 컴파일 오류가 발생한다. final class C { final void ..

언어/Java 2023.08.10

[Java] abstract

abstract abstract로 지정된 클래스나 메소드는 직접적으로 사용할 수 없고, 반드시 상속해서 사용하도록 강제된다. 이렇게 하면 상위 클래스(추상 클래스)에서는 일부 메소드를 추상적으로 남겨두어 하위 클래스에서 구현하도록 한다. 상황에 따라 동작 방법이 달라지는 메소드를 추상 클래스로 구현하면 하위 클래스들에서 각자 다르게 구현하여 사용할 수 있다. 추상 메소드 추상 메소드란 메소드의 시그니처만이 정의되어 있는 메소드를 의미한다. 메소드 시그니처(Method signature)란? 메소드가 설계된 구조를 의미하며, 메소드 이름, 파라미터의 순서, 타입, 개수로 식별된다. abstract class A { // 추상 메소드 (구체적인 로직이 구현되지 않음) public abstract int b(..

언어/Java 2023.08.10

[Java] 접근 제어자

접근 제어자 접근 제어자(access modifier)는 클래스의 멤버(변수, 메소드)들의 접근 권한을 지정한다. Java에서는 4가지 접근 제어자를 제공한다. private public protected default private🔥 클래스 내부에서만 접근할 수 있는 변수, 메소드 사용자가 내부 로직에 접근하는 것을 막아 개발자가 의도하지 않은 오작동을 방지한다. public🔥 클래스 외부에서 접근 가능한 변수, 메소드 사용자에게 객체를 조작하기 위한 의도로 작성된 수단만을 제공하여 결과적으로 객체의 사용에 집중할 수 있도록 돕는다. protected 상속 관계에 있을 때 서로 다른 패키지에 있는 클래스의 접근을 허용 같은 패키지 → 접근 O 다른 패키지, 상속 관계 X → 접근 X 다른 패키지, 상속..

언어/Java 2023.08.10

[Java] 클래스와 인스턴스

객체 지향 프로그래밍 클래스와 인스턴스 객체 지향을 단순하게 생각하면 연관되어 있는 변수(상태)와 메소드(행동)를 하나의 그룹으로 묶어서 그룹핑하는 것이다. 연관된 변수와 메소드들을 모아 놓은 그룹이 클래스(class)이고, 클래스를 이용하여 선언된 객체(object)가 인스턴스(instance)이다. 클래스 클래스는 연관되어 있는 변수와 메소드의 집합이다. 계산기를 클래스로 구현한다고 생각해보면, 입력된 숫자를 저장할 공간(변수)과 더하기, 빼기 등의 계산 기능(메소드)이 있어야 할 것이다. class Calculator { int left; int right; public int add() { return this.left + this.right; } public int subtract() { ret..

언어/Java 2023.08.10

[JS] 자바스크립트 표준입력, 정규표현식, 2차원 배열

Javascript 표준 입력 표준 스트림(standard streams) 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 3가지를 표준 스트림이라고 하며, 운영 체제에서 기본적으로 제공하는 추상화된 입출력 장치를 의미한다. 표준 입력(stdin): 프로그램으로 들어가는 데이터(보통 문자열) 스트림이다. 표준 입력 장치의 ID는 0이며 일반적으로는 키보드가 된다. 표준 출력(stdout): 출력을 위한 데이터 스트림이다. 표준 출력 장치의 ID는 1이며 일반적으로는 현재 쉘을 실행한 콘솔(console)이나 터미널(terminal)이 된다. 표준 에러(stderr): 에러를 위한 데이터 스트림이다. 표준 출력 장치의 ID는 2이며 일반적으로 표준 출력과 동일하다. 출처: 표준..