1. 스프링 프레임워크는 어떤 특징 혹은 장점을 가지고 있나요?
1. 제어의 역전(Inversion of Control, IOC)
제어의 역전이란 개발자가 작성한 객체나 메소드의 제어를 개발자가 아니라 외부에 위임하는 설계 원칙을 말한다.
프로젝트를 프레임워크가 제어하고 개발자가 코드의 일부분이 된다는 뜻으로 이러한 특징 덕분에
개발자는 핵심 비지니스 로직에 더 집중할 수 있는 장점이 있다.
2. 확장성과 유지보수 용이
스프링은 각 기능별로 분리하고 모듈화를 하였기에 추가적으로 확장하기에 용이하고
유지보수를 함에 있어서 가독성이 높아 유리하다.
3. 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)
여러 객체에서 공통적으로 사용하고 있는 기능을 분리해서 모듈화하고 재사용하는 프로그래밍 기법
핵심기능과 공통 기능의 구현을 분리하여 놓았기에 핵심 기능의 코드 수정없이 공통 기능을 적용 가능하다.
즉 핵심비즈니스 로직에서 분리하여 재사용하겠다는 취지이다.
2. 스프링에서 DI (의존성 주입) 를 사용하는 이유가 무엇인가요? 예를 통해 설명 해 보세요.
DI 의존성 주입이란 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라 주입을 받아 사용하는 방법
의존성 주입을 사용하지 않으면 의존하는 개체의 클래스가 변경되거나 다른 클래스의 객체를 사용하게 될 경우 의존 관계에 있는
다른 모든 클래스의 소스 코드도 변경해야하는 강한 결합 상태가 된다.
의존성 주입 방법을 사용하게 되면 객체를 주입하는 부분만 수정하면 되므로 수정할 코드의 양을 줄일 수 있다는 장점이 있다.
3. ORM, JPA, Spring Data JPA 를 구분해서 설명해 보세요.
ORM이란 객체와 DB의 테이블이 매핑을 이루는 것 즉 객체가 테이블이 되도록 매핑 시켜주는것을 말한다.
ORM을 이용하면 sql Query가 아닌 직관적인 코드로 데이터를 조작할 수 있는 장점이 있다.
하지만 query가 복잡해지면 ORM으로 표현하는데에는 한계가 있다.
JPA란 ORM을 사용하기 위한 인터페이스를 모아둔 것이라고 볼 수 있다.
Spring Data JPA란 스프링 프레임워크에서 JPA를 편리하게 사용 할 수 있도록 지원하는 것으로
과제를 진행하면서 Repository에서 findByAll과 같은 메소드를 사용한것이 Spring Data JPA를 사용했다고 볼 수 있다.
4. 인증, 인가를 구분해서 설명해 보세요.
인증이란 해당유저가 실제 유저인지 인증하는 개념이고
인가란 해당유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념이다.
즉 인증은 우리가 흔히 하는 로그인과 같은 절차를 인증이라 부르고 인가는
관리자 페이지와 같은 접근권한이 있어야지만 접근할 수있는 페이지에 접근할때 허가를 확인하는 개념이다.
5. 절차지향 프로그래밍, 객체지향 프로그래밍, 관점지향 프로그래밍은 각각 어떻게 다른가요? (각각 예제 1개 이상)
절차지향 프로그래밍 : 위에서 아래로 물이 흐르듯 순차적인 처리를 중요시하는 프로그래밍 기법
객체지향 프로그래밍 : 객체라는 기본단위로 나누고 이 객체들의 상호작용을 중요시하는 프로그래밍 기법
관점지향 프로그래밍 : 하나의 큰 OOP로 설계된 프로그램을 각 기능별로 모듈화해서 분리시키는 프로그래밍 기법
DIY Section 객체지향 프로그래밍 4가지 특징, 5대 원칙
객체지향의 4가지 특징
1. 캡슐화
각각의 용도별로 클래스를 나눠서 사용하는 자바 객체지향 프로그래밍의 특성상
중요한 정보는 자바에서 제공하는 접근제어자를 통해서 외부에서 접근을 못하도록 제한 할 수 있다.
이를 정보 은닉의 개념이라고 한다.
또한 선언된 변수들과 메소드들을 하나로 묶어 객체의 모듈화를 할 수 있도록 해주고
이는 유지보수를 간편하게 해주는 특징이 있다.
2. 상속
상속은 상위 클래스의 특징을 하위 클래스가 물려받는 것을 말한다.
상위클래스를 물려받은 하위클래스는 더 필요한 속성을 확장해서 쓸 수 있다.
상속은 코드의 중복을 줄이고 하위 클래스로 갈수록 속성을 구체화해준다.
3. 추상화
상속과도 연관이 있는데 추상화는 객체들의 공통 속성이나 행위를 추출을 하는 것이고
상속을 통해 하위클래스로 내려 갈수록 속성을 구체화해준다.
이는 상위클래스에서 핵심적인 부분만을 보여줌으로써 재사용성이나 가독성을 높여준다.
4. 다형성
다형성이란 여러가지의 형태를 가진다는 의미로 형태는 같지만 다른 기능을 가지는 경우를 말한다.
오버로딩과 오버라이딩이 이 부분에 해당하고 이러한 다형성의 특징은 코드의 재사용성을 높인다.
다형성이야말로 다른 특성들을 모두 합쳐놓은 끝판왕같은 느낌이 있다.
이처럼 이 4가지 특징 모두 유지보수를 용이하게 해주고 중복을 제거해주며 재사용성을 높여주는
객체지향 프로그래밍의 핵심적인 특징들이라고 할 수 있다.
객체지향 5대 원칙
1. SRP Single Responsibility Principle 단일 책임 원칙
객체는 오직 하나의 책임을 가져야 한다.
만일 객체가 여러가지의 책임을 가지고 있다면 여러가지 변경 사항이 있을수 있어서
해당 클래스를 변경해야하는 이유가 명확하지 않을 수 있어서 관리하는데에 문제가 발생한다.
단일 책임 원칙을 지키면 변경이 필요할 때 수정할 대상이 명확해진다.
2. OCP Open-Colsed Principle 개방 폐쇄 원칙
객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다.
확장에 대해서 개방적이라는 말은 요구사항이 변경됐을때 새로운 객체를 추가하여 기능을 확장 할수 있음을 말하고
수정에 대해서 폐쇄적이라는 말은 기존의 코드를 수정하지 않고 새로운 객체를 추가할 수 있다는 말이다.
3. LSP Liskov Substitution Principe 리스코프 치환 원칙
자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다.
한마디로 부모클래스를 상속한 자식 클래스는 부모 클래스의 역할을 정확히 해내야 한다라는 뜻이다.
4. ISP Interface Segregation Principle 인터페이스 분리 원칙
클라이언트에서 사용하지 않는 메소드는 사용해선 안된다.
하나의 큰 인터페이스를 상속 받기 보다 인터페이스를 구체적이고 작은 단위들로 분리시켜서
꼭 필요한 인터페이스만 상속하자는 의미이다.
5. DIP Dependency Inversion Principle 의존성 역전 원칙
추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안된다.
클래스와 클래스 사이에는 의존 관계가 존재하게 되는데 이때 구체적인 클래스에 의존하지 말고 최대한 추상화한
클래스에 의존하라는 뜻이고 이는 상위모듈은 하위 모듈에 의존해서는 안된다.
'web > JAVA & SpringBoot' 카테고리의 다른 글
git - flow 전략 (0) | 2022.12.20 |
---|---|
객체지향 5대 원칙(SOLID) (0) | 2022.12.07 |
스프링 빈(Spring Bean) (0) | 2022.12.01 |
MVC 패턴이란 (0) | 2022.11.30 |
Dto vs Entity (0) | 2022.11.30 |