Spring
핵심답변 AOP란? AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍으로 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 본론 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말..
다형성(polymorphism) = 객체지향의 꽃 역할(interface)과 구현(implementation) 역할(interface)과 구현(implementation)으로 구분 ex) 운전자(역할) - 자동차(역할) - 자동차(구현) 운전자(클라이언트)는 자동차 역할에 의존하지 구현에 의존하지 않는다. 핵심은 자동차가 많은 구현을 할 수 있다는 것이 아니라, 어떠한 자동차가 나와도 클라이언트에 영향을 주지않고 새로운 기능을 추가할 수 있다는 것이다. ex) 로미오(역할) - 줄리엣(역할) ... 로미오(원빈, 장동건, 정우성 등), 줄리엣(송혜교, 김다미, 박소담 등) 로미오와 줄리엣은 배우가 될 수도 있고, 어떤 다른 사람이 와도 상관없다. 즉, 대체 가능해야한다 역할과 구현으로 세상을 구분했을 때..
Spring 3대 특징 중 하나인 “PSA” 스프링에서 Controller, Mapping, Transanction 이런 Annotation(어노테이션)등을 클래스나 메서드에 붙이기만 해주면 작동한다 이를 가능케 해주는게 바로 PSA 개념이다 PSA는 Portable Service Abstraction의 약자인데 여기서 핵심은 Service와 Abstraction이다 PSA 중 SA(Service Abstraction)란? Service Abstraction 이란 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해 주는 것을 의미한다. DB에 Transaction 처리를 할 때 Commit , RollBack같은 low level의 작업이 필요할 경우 스프링이 제공하는 @Tran..
변수나 메소드의 사용 권한은 다음과 같은 접근 제어자를 사용하여 설정할수 있다. private default protected public private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다. 하나씩 순서대로 살펴보자. 1. private 접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다. public class Sample { private String secret; private String getSecret() { return this.secret; } } 위 예제의 secret 변수와 getSecret 메소드는 오직 Sample 클래스에서만 접근이 가능하고 다른 클래스에서는 ..
둘 다 다형성을 높여주는 개념이고 비슷한 이름이지만, 전혀 다른 개념이라고 봐도 무방할 만큼 차이가 있음(오버로딩은 다른 시그니쳐를 만든다는 관점에서 다형성으로 보지 않는 의견도 있다). 공통점으로는 같은 이름의 다른 함수를 호출한다는 것! 1. 오버라이딩(Overriding) 상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미. 자바의 경우는 오버라이딩 시 동적바인딩된다. ex) 아래와 같은 경우, SuperClass의 fun이라는 인터페이스를 통해 SubClass의 fun이 실행됨 SuperClass object = new SubClass(); object.fun(); 2. 오버로딩(Overloading) 메소드의 이름은 같음. return 타입은 동일하..
자바는 OS에 독립적인 특성을 가지고 있다. 그게 가능한 이유는 JVM(Java Virtual Machine) 때문이다. JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보자. 자바 컴파일 순서 1. 개발자가 자바 소스코드(.java)를 작성합니다. 2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(.class)코드로 컴파일 합니다. 바이트코드(.class)파일은 아직 컴퓨터가 읽을 수 없는 JVM(자바 가상 머신)이 읽을 수 있는 코드입니다. (java - > class) 3. 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달합니다. 4. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 ..
1. 정적 타입 언어(Statically typed language) 먼저, 변수의 타입이란 int, short, float, String, 객체 와 같은 자료형을 뜻한다. 정적 타입 언어(Statically typed language)는 컴파일 시간에 변수의 타입이 결정! Java, C, C++와 같은 언어들은 프로그래머가 변수의 타입을 직접 명시해 주어야함 OCaml, Haskell, Scala, Kotlin과 같은 언어들은 타입 추론(type inference)을 이용하여 변수의 타입을 추론 장점 : 컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑ , 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성↑ 단점 : 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있음 2. 동..
1. Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소! * db-engines.com 에서 key, value 저장소 중 가장 순위가 높다. Redis에 대해서 더 자세하게 알아보기 전 캐시 서버(Cache Server)에 대해서, 데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까? 데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 ..
스프링의 중요한 특징인 IoC와 DI에 대해서 정리해보려고 한다. 1. 제어의 역전 IoC (Incersion of Control) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 원래 프로그램은 main()에서 시작해 사용할 오브젝트를 결정하고 그 오브젝트를 만들어 안에 있는 메소드를 호출하는 일을 반복한다. main()이 능동적으로 무엇을 사용할지 결정하고 만드는 구조다. 제어의 역전은 스스로 무슨 오브젝트를 사용할지 선택하지 않는다. 생성하지도 않고 자기 자신이 어떻게 만들어지고..