본문 바로가기

IT 개발자 취업 면접 자료

[면접] 객체지향과 관점지향 설명

by Meteora_ 2021. 6. 29.
728x90

객체지향 프로그래밍 (OOP)

 

왜 갑자기 상추 사진이냐구요?

 

객체지향 프로그래밍의 특성을 잘 암기할수있는 문장이있습니다.

 

캡 상 추 다!!!!!!!!!!!!!!!

 

 

* 캡슐화 : 데이터 보호 / 불필요한 부분을 감출 수 있다. (접근 제어자 / 인터페이스 등)

* 상속 : 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것 (class 자손클래스 extends 조상클래스 {...})

* 추상화 : 추상클래스 / 추상메서드 / 인터페이스를 예로 설명

* 다형성 : 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 ( 조상타입의 참조변수로 자손타입의 개체를 다룰 수 있는 것

 

한줄요약 : 코드의 재사용성을 높이고 관리가 용이하다. 코드의 중복을 제거하고 불일치로 인해 오류를 방지한다.

메소드 하나 (도구)로 만들어놓고 상속/인터페이스 등등 으로  필요한곳에다가 떼다가 써먹는거라고 보면되용!

객체지향 프로그래밍을 안하면 필요한곳에다가 해당 코드를 계속 만들어야겠죠?

 

 

관점 지향 프로그래밍

 


스프링하면서 스프링 - AOP를 많이 들었는데 그 AOP 뜻이 관점 지향 프로그래밍입니다.

관점 지향 프로그래밍은 프로그램 로직을 분리된 파트로 변화시키는 것을 의미하죠. 


객체지향 프로그램에는 단점이 있었습니다. 로그, 권한확인, 예외처리 등 핵심기능과 관계는 없지만 반드시 필요한 코드들이 삽입되고 모듈화가 어려워진다. -> 반복적인 코드를 삽입하지 않기 위해 만든 객체(class)인데, 그 class를 반복적으로 사용하면 코드의 재사용성이 떨어지고 생산성이 낮아집니다.

 

그래서 나온것이 AOP인데

 

AOP는 어플리케이션 전반에 사용되는 기능을 여러 코드에 쉽게 적용할수있도록 하는 프로그래밍입니다. 게시판이라는 핵심 기능과 로깅, 권한확인, 트랜잭션같은 부가 기능사이에는 공통점이 없습니다. 하지만 이러한 부가기능들은 프로그램 시작/종료시점에 꼭 적용되어야합니다

 

 

결국 OOP 객체는 자신의 관심 기능만 가질수있게되고 AOP를 이용해 부가기능 코드를 직접 호출하지 않아도됨. AOP는 공통된 부가기능을 모듈화한 뒤 필요한 지점에 기능을 삽입한다. OOP의 업그레이드라고 보면되죠.

 

 

 

 

AOP용어 정리 ->

 

더보기

1. 타깃(Target)

 

Target이란 말 그대로 부가기능(횡단관심사)로 분리된 모듈이 적용될 대상을 뜻한다.

로깅을 하기위한 해당 비즈니스 로직들이 이에 해당된다.

 

 

2. 어드바이스(Advice)

 

실질적으로 부가기능 모듈, 부가기능 모듈이 구현된 구현체를 뜻한다.

어드바이스는 에스팩트(Aspect)가 언제, 무엇을 할지를 정의하고 있다.

 

 

3. 조인포인트(Join Point)

 

어드바이스가 적용될 위치를 뜻한다.

다른 AOP프레임워크와 달리 Spring프레임워크에서는 메소드 조인포인트만 제공한다고 한다.

따라서 Spring프레임워크에서 조인포인트란 메소드, 즉 타킷 오브젝트가 구현한 인터페이스의 모든 메소드를 가리킨다.

 

 

4. 포인트 컷(Pointcut)

 

부가가능이 적용될 메소드를 선정하는 방법이다.

어드바이스가 적용될 조인포인트 중 실제 부가기능이 적용될 조인포인트를 선별하는 기능이라고 보면 된다.

 

 

5. 프록시(Proxy)

 

타겟을 감싸서 클라이언트의 요청을 대신 받아주는 오브젝트이다.

 

 

6. 어드바이져(Advisor)

 

포인트컷과 어드바이스를 하나씩 가지고 있는 오브젝트이다.

AOP의 가장 기본이 되는 모듈이다.

 

 

7. 에스팩트(Aspect)

 

에스팩트는 위에서 나온 부가기능이 정의된 어드바이스와 어드바이스가 적용될 포인트 컷의 조합이다.

 

댓글