전체 글
[JS] const vs let vs var
변수 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 메모리 공간을 식별하기 위해 붙인 이름 변수 선언 방식 1. var 변수 선언 방식에 있어서 큰 단점을 가지고 있음 var name = 'yeeun' console.log(name) // yeeun var name = 'javascript' console.log(name) // javascript 변수를 한 번 더 선언했음에도 불구하고, 에러가 나오지 않고 각기 다른 값이 출력됨 코드량이 많아진다면 어디에서 어떻게 사용됐는지 파악 어려움 값이 바뀔 가능성 높음 2. let let name = 'yeeun' console.log(name) // yeeun let name = 'javascript' console.log(name) // Uncaught..
[JS]백준에서 node.js 입출력 받기
fs 모듈을 이용 1) 한 줄로 입력을 받을 때 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split(' '); 2) 여러 줄로 입력을 받을 때 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split('\n'); # vscode에서 테스트용 1) vscode 터미널에 'npm install fs'로 파일시스템을 설치 2) 문제를 풀 때마다 예제.txt에다가 예제를 복사한 후 실행해보려고 예제.txt를 만든다 3) 아래와 같이 readFileSync의 경로를 예제.txt의 위치로 수정 let input = require(..
[JS] match()함수
match() 함수 특정 텍스트 안에 검색할 단어, 찾고 싶은 단어가 있는 경우 해당 텍스트가 문구에 포함되어 있는지 확인할 수 있음 인자에 포함된 문자를 찾으면 이를 반환함. 해당 문자열.match('찾을 단어') # match() 함수 예제소스 var str = 'red is impressive.' str.match('red'); // red가 있으므로 red를 출력함 # 정규표현식을 사용한 match() 함수 예제 var test = 'love you. love me. love everything!' var regExp = /love/gi; test2 = test.match(regExp); g : 발생할 모든 pattern에 대한 전역 검색 i : 대/소문자 구분 안함 ['love', 'love',..
[gitlab] dev에서 pull한 후 오류 지우고 merge하는 방법
https://www.bearpooh.com/77 gitlab에서 소스코드 Pull Request와 Merge 하기 이전 포스팅에서 gitlab에서 clone, checkout, commit, push 등 소스 코드 관련 작업 방법을 다뤘다. gitlab에서 소스코드 작업하기 (clone, checkout, commit, push) project와 branch까지 만들었으면 코드 개발을 위해 www.bearpooh.com 직전 merge 취소 하는 명령어 git merge --abort https://velog.io/@2ujin/%EA%B9%83-Pull-is-not-possible-because-you-have-unmerged-files-%EC%97%90%EB%9F%AC [깃] Pull is not p..

스레드 제어
스레드 상태 스레드를 생성하고 시작하면 스레드는 다양한 상태를 가지게 된다. 스레드의 상태는 자동으로 변경될 수도 있고, 코드에 의해서 변경될 수도 있음. 실행 상태 : 실행 대기 상태에 있는 스레드 중에서 운영체제는 하나의 스레드를 선택하고 CPU가 run() 메소드를 실행하게함 종료 상태 : 실행 상태에서 run() 메소드가 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 됨 스레드 상태 제어 실행중인 스레드의 상태를 변경하는 것 일시 정지 실행 중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep()을 사용 다음과 같이 Thread.sleepO 메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간..

멀티 스레드
프로세스 운영체제에서는 실행 중인 하나의 애플리케이션 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스이다. 멀티프로세스 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 각 프로세스는 서로 독립적이다. 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다. 멀티 스레드 하나의 프로세스 내에 동시 실행을 하는 스레드들이 2개 이상인 경우 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있음 다른 스레드에 영향을 미침 메인 스레드 자바의 모든 애플리케이션은 메인 스레드가 main() 메소드를 실행하면서 시작한다. 메인 스레드는 main() 메소드의 ..

java.util 패키지
Date 클래스 특정 시점의 날짜를 표현하는 클래스 Date 객체 안에는 특정 시점의 연도, 월, 일, 시간 정보가 저장된다. Date now = new Date(); Calendar 클래스 달력을 표현한 클래스 추상 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다. Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로한 Calendar 하위 객체를 얻을 수 있음 Calendar now = Calendar.getlnstance(); Calendar 객체를 얻으면, 연도, 월, 일, 요일, 오전/오후, 시간 등의 정보를 얻을 수 있음 [확인 문제] package yeong.verify.exam01; import j..

java.lang 패키지
자바 API 도큐먼트 API : 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음 API 도큐먼트 : 우리가 원하는 API를 쉽게 찾아 이용할 수 있도록 도와줌 API 도큐먼트에서 클래스 페이지 읽는 방법 Object 클래스 자바의 최상위 부모 클래스 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object 클래스의 메소드는 모든 자바 객체에서 사용할 수 있다. - 객체 비교( equals() ) public boolean equals(Object obj) { ••• } equals() 메소드의 매개타입은 Object인데, 이것은 모든 객체가 매개값으로 대입될 수 있음을 말함 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문 비교 연산자인 ==과 동일한..

익명 객체
익명 객체 이름이 없는 객체 - 어떤 클래스를 상속하거나 인터페이스를 구현해야한다. 익명 객체를 생성할 때에는 클래스 이름이 없음 부모 클래스 변수는 이름이 없는 자식 객체를 참조 인터페이스 변수는 이름이 없는 구현 객체를 참조 익명 자식 객체 생성 자식 클래스가 재사용되지 않고 오로지 특정 위치에서 사용되는 경우 사용 ‘부모클래스(매개값, ...){… }' : 부모클래스를상속해서 중괄호{} 와같이 자식 클래스를 선언하라 new 연산자 : 선언된 자식 클래스를 객체로 생성 ‘부모클래스(매개값, ...)' : 부모 생성자를 호출하는 코드, 매개값은 부모 생성자의 매개 변수에 맞게 입력하면 된다. 중괄호 {} 내부 : 필드와 메소드를 선언하거나 부모 클래스의 메소드를 재정의하는 내용 작성 익명 자식 객체에 ..

중첩 클래스와 중첩 인터페이스
중첩 클래스 클래스 내부에 선언한 클래스 두 클래스의 멤버들을 서로 쉽게 접근 가능 코드의 복잡성을 줄일 수 있음 멤버 클래스 클래스의 멤버로서 선언되는 중첩 클래스 로컬 클래스 생성자 또는 메소드 내부에서 선언되는 중첩 클래스 - 멤버 클래스는 클래스나 객체가 사용 중이라면 언제든지 재사용이 가능하지만, 로컬 클래스는 메소드를 실행할 때만 사 용되고 메소드가 종료되면 없어진다. 중첩 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트 코드 파일(.class)이 별도로 생성된다. - 멤버 클래스일 경우 - 로컬 클래스일 경우 인스턴스 멤버 클래스 - static 키워드 없이 중첩 선언된 클래스 - 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언 불가능 정적 멤버 클래스 - static..

타입 변환과 다형성
자동 타입 변환 - 구현 객체가 인터페이스 타입으로 변환되는 것 - 프로그램 실행 도중에 자동적으로 타입 변환이 일어난다 - 인터페이스 구현 클래스를 상속해서 자식 클래스를 만들었다면 자식 객체 역시 인터페이스 타입으로 자동 변환 가능 필드의 다형성 - 한국 타이어와 금호 타이어는 공통적으로 타이어 인터페이스를 구현했기 때문에 모두 타이어 인터페이스에 있는 메소드를 가지고 있다. => 따라서 타이어 인터페이스로 동일하게 사용할 수 있는 교체 가능한 객체에 해당 매개 변수의 다형성 - 자동 타입 변환은 필드 값을 대입할 때에도 발생하지만, 주로 메소드를 호출 할 때 발생한다. - 매개값을 다양화하기 위해서는 상속에서 매개 변수를 부모 타입으로 선언하고 호출할 때에는 자식 객체를 대입, - 매개 변수의 타입..

인터페이스
인터페이스 - 객체의 사용 방법을 정의한 타입 - 개발 코드와 객체가 서로 통신하는 접점 역할 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. => 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됨 인터페이스 선언 인터페이스 선언은 class 키워드 대신에 interface 키워드를 사용 [public] interface 인터페이스이름 { ••• } # 인터페이스 이름 작성 방법 영어 대소문자 구분 첫 글자 대문자 나머지 소문자 interface 인터페이스이름 { //상수 타입 상수이름 = 값; //추상 메소드 타입 메소드이름(매개변수,…); } - 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다. 상수 필드 선언 ..