본문 바로가기

클로저란? 렉시컬 스코프 클로저를 이해하려면 자바스크립트의 렉시컬 스코프를 이해해야 하는데 자바스크립트는 컴파일 단계에서 소스코드 문자열을 분석하여 의미를 부여하는 렉싱이라는 작업을 하게 되고 이때 스코프가 된다. function foo() { var a = 100; function bar() { var b = 200; console.log(a + b); } bar(); } foo(); 우리가 위 코드를 실행하면 foo() 메서드 내의 bar() 메서드 안의 console.log() 메서드가 실행되는데 a + b를 구하기 위해 bar()함수의 스코프부터 a변수를 찾게 된다. 찾지 못하였으니 그다음 foo()함수의 스코프 찾게 되고 a변수를 사용하였으니 사용한다. b변수는 bar스코프 내에 있으니 바로 사용하여 30..
호이스팅이란? 호이스팅이란? 자바스크립트는 실행 시 코드가 위에서부터 한줄한줄 차례대로 실행된다고 생각할 수 있으나 아래의 예시를 보면 조금 다르다는 것을 알 수 있다. a = 100; var a; console.log(a); //undefined가 아니라 100 . console.log(a); //100이 아니라 undefined var a = 100; 자바스크립트는 실행되기 전 함수 내 선언된 변수는 함수의 최상단으로, 함수 바깥의 경우는 전역 범위의 최상단으로 선언문을 끌어올린다. 이때 주의해야 할 점은 선언문만 끌어올려지는 것이며, 할당은 호이스팅이 되지 않는다. 이를 이해했다면 위의 두 번째 예시에서 100이 출력되지 않고 undefined가 출력된 지 이해할 수 있다. console.log(a); var a..
mac에서 원화(₩) 대신 backtick(`) 사용하기 es6에서 표현식을 템플릿 리터럴은 backtick(`)으로 묶어서 사용하는데 macOS Sierra이후부터 숫자키 1 왼쪽의 backtick(`)이 원화(₩)로 바뀌었다. 키를 변경하려면 아래와 같이 진행하면 된다. 1. ~/Library 디렉토리 밑에 KeyBindings 생성 mkdir ~/Library/KeyBindings 2. KeyBindings 디렉토리 안에 DefaultkeyBinding.dict 생성 touch DefaultkeyBinding.dict //혹은 vi DefaultkeyBinding.dict 3. 생성된 파일에 아래 내용 추가 { "₩" = ("insertText:", "`"); } 실행 중인 애플리케이션을 새로 실행하면 변경됨을 확인할 수 있다.
양방향 연관관계 양방향 연관관계 엔티티의 관계가 서로를 참조하게 되면 양방향 연관관계라고 한다. 객체에서는 Member는 Team을 가지고 있고 Team은 일대다 관계여서 여러 Member와 관계를 맺을 수 있으므로 List 컬렉션을 사용한다. 테이블에서는 외래키 하나로 Join을 통해 Member와 Team을 조회 가능하기 때문에 단방향 연관관계와 동일하다. 객체 관계 매핑 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entity public..
GIt, Github 커맨드 정리 git, github을 사용하면서 자주 사용하는 커맨드를 정리하였다. Git 로컬에서 관리되는 버전 관리 시스템 git init: 현재 디렉토리를 로컬 저장소로 설정할 때 git status: Git이 인식하고 있는 파일 상태를 확인할 떄 git이 관리하는 파일은 Tracked와 Untracked로 나뉜다. Tracked: 파일의 상태가 Git에 의해 추적 중인 상태로 3가지로 분류된다. Unmodified: 변경된 내용이 없는 상태 Modified: 변경된 내용이 있는 상태 Staged: 변경된 내용이 staging area에 올라간 상태 Untracked: 파일을 추적하고 있지 않음 git add [파일명 or 디렉토리명]: 수정사항이 있는 파일 혹은 디렉토리를 staging area에 올림 git ..
단방향 연관관계 단방향 연관관계 엔티티의 관계가 한쪽만 참조하는 것을 단방향 관계라고 한다. 객체의 연관관계와 테이블에서의 연관관계의 차이 객체는 참조를 통해 연관관계를 맺어 언제나 단방향이다. 따라서 객체 간 연관관계를 양방향으로 만들려면 반대쪽도 필드를 추가해야 한다. 하지만 테이블에서는 외래키를 통해 연관관계를 맺으며 A join B가 되면 B join A도 가능하다. 객체 관계 매핑 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entit..
영속성 컨텍스트란? 영속성 컨텍스트란? 영속성 컨텍스트는 논리적인 개념으로 해석하면 '엔티티를 영구 저장하는 환경'이란 뜻으로 모든 엔티티를 DB에서 가져오거나 DB에 저장하는 캐시라고 생각하면 이해하기 쉽다. 엔티티의 생명주기 엔티티는 4가지 상태가 존재한다. 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 상태로 순수한 객체상태Account account = new Account(); account.setId(1L); account.setEmail("hong@mail.com"); account.setNickname("홍길동"); 영속(managed) 영속성 컨텍스트에 저장된 상태로 영속성 컨텍스트에 의해 관리됨 영속상태는 DB에 저장된 상태가 아니다(트랜잭션의 commit이 발생한 시..
Errors나 BindingResult사용시 주의할 점 스프링의 유효성 검사 스프링에서는 import org.springframework.validation.Validator 인터페이스를 통해 객체 검증이나 에러 메세지등을 지원한다. 컨트롤러에서 객체의 값을 검증할 때 Validator 인터페이스를 구현하여 유효성 검사를 하는데 주의할 점이 있다. BindingResult나 Errors는 바인딩 받는 객체의 바로 다음에 선언해야 된다. 이를 인지하지 않은 상태로 구현을 작성하여 BindException이 발생하였던 내용을 정리하였다. org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors현상 내가 예상했던 동작은 ..