IT 시사 및 CS 지식
[CS스터디]220610 Java - 4
강한 결합과 느슨한 결합이 무엇인지 설명해주세요. 강한 결합 말 그대로 한 객체가 다른 객체와 강하게 의존 관계가 형성되어 있을 경우 그 결합을 강한 결합이라고 함. public class B { private A a; public B() { this.a = new A(); } public void doB() { a.doA(); } } public class A { public void doA() { System.out.println("doA()"); } } 예를 들어 이렇게 A 클래스가 없으면 B 클래스를 정의할 수 없는 상황인 경우 B 클래스는 A 클래스에 의존한다고 표현함. 그리고 이 때 A 클래스를 다른 클래스로 바꾸면 B 클래스의 코드도 바꿔줘야 함! 간단한 코드라 망정이지 복잡한 코드면 유지 ..
[CS스터디]220609 Java - 3
SOLID(객체지향 5대원칙)에 대해서 설명해주세요. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 함. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 함. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 함. DIP(De..
[CS스터디]220607 Java - 2
인터페이스와 추상 클래스 공통점 상속 받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다. 차이점 추상클래스 인터페이스 추상클래스 인터페이스 extends implements 하나 이상의 메서드가 추상 메서드이면 모든 메서드가 추상 메서드 추상 메서드 1개 이상, 일반 변수, 일반 메서드 가능 추상 메서드, 상수만 선언 가능 생성자, 일반 변수 가질 수 있음 생성자, 일반 변수를 가질 수 없음 존재 목적이 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는데 있음 함수의 껍데기만 있음. 그 이유는 그 함수의 구현을 강제하기 위해서임. 구현을 강제하므로써 구현 객체의 같은 동작을 보장할 수 있음! 상속은 슈퍼 클래스의 기능을 이용하거나 확장하기 위해서 사용되고, 다중 상속의..
[CS스터디]220607 Java - 1
JVM의 구조와 Java의 실행 방식 JVM이란? 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행할 수 있게 해줌(.java 파일을 .class 파일(바이트 코드)로 변환해서 실행할 수 있게 해줌) JVM의 구조 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당 받습니다. 그리고 자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환합니다. 다음 Class Loader에서 바이트 코드를 JVM에 로딩 시킵니다. 로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다. 해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다. Java의 실행 방식 WO..
[CS스터디]220607 Spring - 3
Servlet Filter와 Spring Interceptor의 차이는 무엇인가요? Servlet Filter Servlet Filter는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다! 이 그림에서 처럼 필터는 스프링의 범위 밖에서 처리가 되는 것임!! 그니까 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것임! (스프링 빈으로 등록은 됨) 필터를 추가하기 위해서는 javax.servlet의 Filter 인터페이스를 구현해야 함 init(), doFilter(), destroy() 메서드가 존재함 쓰이는 용도 공통된 보안 및 인증/인가 관련 작업 모든 요청에 대한 로깅 또는 감사 이미지/데이터 압축 및 문..
[CS스터디]220602 Spring - 2
DI의 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요? DI의 종류에는 Constructor Injection(생성자 주입)과 Field Injection(필드 주입), Setter Injection(수정자 주입)이 있음 1. 생성자 주입 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Component public class ABean { private BBean b; public ABean(BBean b) { this.b=b; } public void bMethod() { b.print(); } } cs 생성자를 위한 빈 주입은 위와 같이 생성자의 매개변수로 의존 주입할 빈을 매개변수로 넣어준다. 스프링 4.3 버전 이후로는 생성자 의존주입에 @Autowired를 넣을 필요는 없다. ..
[CS스터디]220601 Spring - 1
Spring DI/IoC는 어떻게 동작하나요? 어떻게 동작하는지 알기 전에 얘네가 무엇인지를 먼저 알아야 하는데 DI(Dependency Injection)/IoC(Inversion of Control)란? DI는 말 그대로 '의존성 주입'이고, IoC는 '제어의 역전'이다. Spring 프레임 워크를 사용하기 전에 쌩 자바로 코딩을 하면 무언가(메서드나 객체)를 가져다 쓸 때 그 무언가가 있는 라이브러리 등을 가져다 쓴다고 미리 알려주고 써야된다. 예를 들면 자바 프로그램은 main() 에서부터 시작을 하는데 그 안에 있는 애들을 어디서 가지고 와서 사용하는지 명시해줘야 한다. IoC는 이렇게 메서드나 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다! - 객체 지향 언어에서 ..
Web Server vs WAS (Web Application Server)
Web Server란? 웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스(Resource)를 전달하는 컴퓨터 클라이언트는 주문을 하는 고객이라고 생각하고, 웹 서버는 주문을 받는 직원이라고 생각하시면 편함. 직원인 서버는 고객이 주문하기를 기다리는 것처럼 클라이언트의 요청을 기다리고, 고객이 HTTP 요청을 보냄. 요청을 보내면, 직원은 고객의 주문에 대한 상품을 만들어서 주는 것처럼 서버는 클라이언트의 요청에 대한 데이터를 만들어서 응답하는 것이라고 보면 됨. 예를 들어서, 네이버 페이지 같은 경우에는 html, css, 이미지 같은 걸로 되어있을 텐데, 얘네들을 정적인 데이터라고 하고, 웹서버는 클라이언트에게 정적인 데이터만 넘겨줄 수 있음. 이미 만들어져 있는 정적인 데이..