일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Dijkstra
- Stored Procedure
- DP
- 이진탐색
- Hash
- Brute Force
- 그래프
- 스토어드 프로시저
- String
- SQL
- MYSQL
- union find
- binary search
- two pointer
- Trie
- 다익스트라
- Two Points
- Today
- Total
목록Programming Language (50)
codingfarm
인터페이스란? 추상클래스보다 추상화의 정도가 높은 클래스이다. 일반 메서드나 필드를 구성원으로 가질 수 없다. 오직 추상 메서드와 상수만을 멤버로 가진다. 추상 클래스 인터페이스 부분적으로만 완성된 '미완성 설계도' 구현된것이 아무것도 없는 '기본 설계도' 작성법 키워드로 class 대신 interface를 사용한다. 나머지는 일반 클래스와 작성법이 같다. 접근제어자로 public 또는 default를 쓸 수 있다. 1 2 3 4 interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 반환타입 메서드이름(매개변수목록); } Colored by Color Scripter cs 인스턴스의 멤버들은 다음과 같은 제약사항을 가진다. 모든 멤버변..
추상클래스란? 추상메서드를 포함한 클래스 추상메서드 : 선언부만 있고, 구현부는 없는 메서드 구현부 작성은 추상클래스를 상속받는 자식클래스에서 수행한다. 일반 클래스처럼 필드, 일반 메서드를 가질수 있고, 인스턴스화도 가능하다. 문법 : 키워드 abstract를 붙이면 된다. 1 2 3 abstract class 클래스이름 { // ... } cs 추상 메서드는 키워드 'abstract'를 함수 선언부 앞에 붙이면된다. 아무 내용도 없는 메서드로 작성해도 추상메서드가 되지만, abstract를 붙여야 자손 클래스에서 구현을 강요할 수 있다. 1 2 abstract 리턴타입 메서드이름1(); 리턴타입 메서드이름2() {}; cs 추상 클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 추상메서드를 모두 구..
1. 다형성이란? 정의 : 여러가지 형태를 가질 수 있는 능력 OOP의 4대 특징 중 하나 추상화 캡슐화 상속성 다형성 JAVA에서는 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하여 다형성을 구현한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 class Tv{ boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTv extends Tv{ String text; // 캡션을 보여주기 위한 문자열 void caption() {/*...*/} } Colored by Co..
1. 내부슬롯(internal slot)과 내부 메서드(internal method) js engine의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티(pseudo property)와 의사 메서드(pseudo method)다. ECMAScript 사양에 등장하는 이중 대괄호[[...]]로 감싼 이름들이 internal slot과 internal method 이다. 262.ecma-international.org/#sec-object-internal-methods-and-internal-slots internal slot과 internal method는 JS engine의 내부 로직이므로, javascript는 이들에 대해 직접적으로 접근하거나 호출할 방법을 제공하지 않..
전역 변수는 암묵적 결합을 허용한다. 암묵적 결합 : 전역변수를 코드 어디서든 참조하고 할당할 수 있는 성질 긴 생명주기 메모리 리소스를 차지하는 기간이 길어진다. 스코프 체인상에 종점에 존재 검색 속도가 느리다. 네임스페이스 오염 자바스크립트는 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다. 다른 파일 내에 동일한 이름으로 명명된 전역 변수나 함수가 같은 global scope 상에 존재함에 따라 유지보수가 어려워진다. 전역변수의 사용을 억제하는 방법 1. 즉시 실행 함수 모든 코드를 즉시 실행 함수로 감싸면 모든 전역 변수는 즉시 실행 함수의 지역변수가 된다. 1 2 3 4 5 6 (function () { var foo = 10; // ... }()); console.log(foo); // ..
1. 지역변수의 생명 주기 생명주기(life cycle) : 변수의 메모리가 확보(allocate)된 시점부터 해제(release)되어 가용 메모리 풀(memory pool)에 반환되는 시점 변수는 자신이 선언된 scope 내에서 생성되고 소멸된다. 전역변수의 생명 주기 = 애플리케이션의 생명주기 지역변수의 생명 주기 = 함수의 생명 주기 호이스팅은 스코프를 단위로 작동한다. 1 2 3 4 5 6 7 8 9 kjjvar x = 'global'; function foo() { console.log(x); // undefined var x = 'local'; } foo(); console.log(x); // global cs 2. 전역 변수의 생명 주기 전역 코드는 코드가 로드되자마자 곧바로 해석되고 실행되..
1. 제어자란? 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 하나의 대상에 대해 여러 제어자를 조합하여 쓰는것이 가능하다. 한번에 네 가지 중 하나만 선택해서 사용할 수 있다. ex) public과 private를 함께 쓸 수 없다. 접근제어자와 그 외의 제어자로 나뉜다. 접근 제어자 - public, protected, default, private 그 외 - static, final, abstract, native, transient, synchronized, volatile, strictfp 2. static 의미 : '클래스의', '공통적인' 사용될 수 있는 곳 - 멤버변수, 메섣, 초기화 블럭 제어자 대상 의미 static 멤버변수 - 모든 인스턴스에 공통적으로..
1. 스코프란? 특정 변수들에 접근 가능한 '유효범위' JS engine이 식별자를 검색할 때 사용하는 규칙 1 2 3 4 5 6 7 8 9 var x = 'global'; function foo(){ var x = 'local'; console.log(x); // local } foo(); console.log(x); // global cs 스코프는 변수 및 함수의 접근 범위를 지칭하는 네임스페이스 라고도 볼 수 있다. scope를 통해 같은 이름을 가진 변수간의 충돌을 막을 수 있다. 2. 스코프의 종류 코드는 전역(global)과 지역(local)로 구분할 수 있다. 구분 설명 스코프 변수 전역 코드의 가장 바깥 영역 전역 스코프 전역 변수 지역 함수 몸체 내부 지역 스코프 지역 변수 3. 스코프 ..
var 키워로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용된다. 1 2 3 4 5 6 function foo(){ var x = 1; var x = 2; console.log(x); } foo(); cs 하지만 let이나 const 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용하지 않는다. 123456function foo(){ let x = 1; let x = 2; console.log(x); // SyntaxError: Identifier 'x' has already been declared}foo();Colored by Color Scriptercs
함수 리터럴 자바스크립트의 함수는 객체 타입의 값이다. 숫자 값을 숫자 리터럴로 생성하고, 객체를 객체 리터럴로 생성하듯이, 함수도 함수 리터럴로 생성할 수 있다. 함수 리터럴은 function 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다. 1 2 3 4 5 6 7 // 변수에 함수 리터럴을 할당 var f = function add(x, y) { return x + y; }; console.log(f(1,2)); // 3 console.log(add(3,4)); // reference error cs 위 코드를 보면 함수 리터럴을 변수에 할당하고 있다. 리터럴은 사람이 이해할 수 잇는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기방식이다. 즉, 리터럴은 값을 생성하기 위한 표기법이..
progtrend.blogspot.com/2017/03/deleted-functions.html C++ deleted functions (함수의 삭제 선언) C++ deleted functions. progtrend.blogspot.com 어떤 함수를 삭제하면 그 함수에 대한 어떠한 호출도 불가능해진다. C++ 11이전에서는 그런 메서드를 private로 선언하여 사용을 막았으나, C++ 11부터는 함수 삭제 기능을 지원한다. 그렇다면 함수를 처음부터 안만들면 되는것 아닐까? 문제는 컴파일러가 자동으로 만드는 함수들에 있다. C++ 컴파일러는 클래스의 생성자, 파괴자, 대입연산자를 자동으로 생성한다. 이때, 그런 함수들을 일정 사용하지 못하게끔 하기 위해서 함수를 delete 시킨다. 1 2 3 4 5 ..
자바스크립트가 제공하는 데이터 타입은 7가지이다. 숫자 문자열 불리언 null undefined 심벌 객체 타입 이 데이터 타입들은 크게 원시 타입(primitive type)과 객체 타입(object/reference type)으로 구분된다. 원시 타입과 객체 타입은 크게 세 가지 측면에서 다르다. 원시 타입(primitive type) 객체 타입(object/reference type) 변경 불가능한 값(immutable value) 변경 가능한 값(mutable value) 변수에 실제 값이 저장된다. 변수에 참조 값이 저장된다. 값에 의한 전달(pass by value) 참조에 의한 전달(pass by reference) 1. 원시 값(primitive type) 1.1 변경 불가능한 값(immu..
super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. 멤버변수와 지역변수의 이름이 같을때 this로 구별하듯이, 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package project_1; class Parent{ int x = 10; void Method() { System.out.println(x); } } class Child extends Parent{ int x = 20; void Method() { System.out.println(x); Syst..
오버라이딩이란 조상클래스로부터 상속받은 메서드의 내용을 변경하는것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Point{ int x; int y; String getLocation() { return "x : " + x + ", y :" + y; } } class Point3D extends Point{ int z; String GetLocation(){ return "x : " + x + ", y :" + y + ", z : " + z; } } Colored by Color Scripter cs 가령 아래 코드를 확인해보면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 pa..
상속(inheritance) 상속 : 기존의클래스를 재사용하여 새로운 클래스를 작성하는것 class Parent { int age; } class Child extends Parent { void play(){ System.out.println("hello"); } } Child 클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다. Play 함수는 Child 클래스 내에서만 독자적으로 사용할 수 있다. Parent와 Child 클래스를 상속관계도와 다이어그램으로 표현하면 아래와 같다. 생성자와 초기화 블럭은 상속되지 않는다. 멤버(필드, 메서드)만 상속된다. 접근제어자가 private또는 default인 멤버들은 상속되지 않는다기보다는 상속은 받지만 자손 클래스로부터의 접근이 제한된..
#pragma는 define이나 include같은 전처리구문(precomplier)의 하나이다. 컴파일러에게 #pragma 뒤에 오는 내용에 따라 어떤일을 하라는 전처리 명령이다. 주로 쓰이는 사용법은 아래와 같다. #pragma once 한번 컴파일 되면 더이상 컴파일 하지 않는다는 뜻이다. 여러개이 cpp 파일이 있을때, 하나의 cpp 파일이 수정되면, 그 파일만 컴파일하고 나머지는 하지말아란 뜻이다. #pragma comment(lib, "ws2_32") 컴파일시 ws2_32.lib 파일을 링크하라는 명령이다. 보통 visual studio 같은 IDE 개발환경에서는 프로젝트 셋팅에서, 리눅스 터미널등의 cmd 환경에서는 gcc를 이용한 컴파일시에 세팅해주는 방법을 코드냉서 가능하게 해준다. #pr..
1. 객체란? JS는 객체 기반의 프로그래밍 언어이며, JS를 구성하는 거의 모든것이 객체이다. 원시값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다. 원시타입 : 하나의 값만 나타낸다. 객체타입 : 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조다. 원시 타입의 값, 즉 원시값은 변경 불가능하지만, 객체는 변경 가능한 값(mutable value) 이다. 이는 추후 자세히 살펴볼것 객체는 0개 이상의 프로퍼티로 구성된 집합이다. 프로퍼티는 키와 값으로 구성된다. var person = { name: 'Lee', age: 20 }; name : 'Lee'와 age: 20 각각의 문장들은 프로퍼티로 분류된다. name과 age는 프로퍼티 키, 'Lee'와 20은 프로퍼티 값이..
비교 연산자 의미 사례 설명 == 동등 비교 x == y x와 y의 값이 같음 === 일치 비교 x === y x와 y의 값과 타입이 같음 != 부동등 비교 x != y x와 y의 값이 다름 !== 불일치 비교 x !== y x와 y의 값과 타입이 다름 타입은 개발자의 의도와 상관없이 JS에 의해 변환되기도 한다.(암묵적 타입 변환) 동등비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다. //동등 비교 5 == 5;// true // 타입은 다르지만 암묵적 타입 변환을 통해 타입을 일치시키면 동등하다. 5 == '5';//true 암묵적 형변환은 결과를 예측하기 어렵게 만들기도 한다. 아래는 안티패턴이므로 가능하면 쓰지 말자 ..
데이터 타입은 값의 종류를 말한다. JS의 모든 값은 데이터타입을 갖는다. JS(ES6)는 7개의 데이터 타입을 제공한다. 원시타입(primitive type)과 객체 타입(object/reference type)으로 분류된다 구분 데이터 타입 설명 원시 타입 숫자(number) 타입 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 문자열(string) 타입 문자열 불리언(boolean) 타입 논리적 참(true)과 거짓(false) undefined 타입 var 키워드로 선언된 변수에 암묵적으로 할당되는 값 null 타입 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 심법(symbol) 타입 ES6에서 추가된 7번째 타입 객체 타입 객체, 함수, 배열 등 숫자 타입(Number Type) ..
값(value) 식(expression)이 평가(evaluate)되어 생성된 결과를 말한다. 평가 : 식을 해석해서 값을 생성하거나 참조하는것 변수 : 하나의 값을 저장하기 위해 확보된 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름 // 아래 변수에는 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다. var sum = 10 + 20; 리터럴(literal) 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등...) 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation) 값을 생성하기 위한 약속된 표기법이라 볼 수 있다. //숫자 리터럴 3 3 위 코드에서 3은 단순한 아라비아 숫자가 아닌 숫자 리터럴이다. 리터럴로 만들 수 있는 값의 종류(data typ..