- 중복된 코드가 많다
→ 가독성, 유지보수의 효율성이 떨어진다- 중복된 코드가 많을시 클래스를 만들어서 메소드 호출(📃OopLogger.java)
→ 추상화(캡슐화)의 개념을 위반
※ src/main/java 폴더에 xyz.itwill06.oop 패키지 생성
📢OOP 단점 : 모듈화가 너무 강력하여 핵심관심코드와 횡단관심코드를 분리하여 프로그램 작성이 어려움
→ 코드의 중복성이 높아 프로그램의 생산성 및 유지보수의 효율성 감소
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
📢횡단관심코드 : 프로그램 실행에 보조적인 기능을 제공하는 명령
→ 로그 처리(기록), 권한 처리, 트렌젝션 처리, 예외 처리 등
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
📢핵심관심코드 : 프로그램 실행에 핵심적인 기능을 제공하는 명령
/→ 데이터 처리 명령📃OopOne.java
※ xyz.itwill06.oop 패키지에 OopOne.java 클래스 생성
package xyz.itwill06.oop; // //OOP 단점 : 모듈화가 너무 강력하여 핵심관심코드와 횡단관심코드를 분리하여 프로그램 작성이 어려움 //→ 코드의 중복성이 높아 프로그램의 생산성 및 유지보수의 효율성 감소 public class OopOne { //중복코드가 많아서 private 메소드로 만들어서 작성(private는 다른 클래스에서는 사용 X) /* private void beforeLog() { System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); } */ // private OopLogger logger=new OopLogger(); // public void display1() { //횡단관심코드 : 프로그램 실행에 보조적인 기능을 제공하는 명령 //→ 로그 처리(기록), 권한 처리, 트렌젝션 처리, 예외 처리 등 //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); // //핵심관심코드 : 프로그램 실행에 핵심적인 기능을 제공하는 명령 //→ 데이터 처리 명령 System.out.println("### OopOne 클래스의 display1() 메소드 호출 ###"); } public void display2() { //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); System.out.println("### OopOne 클래스의 display2() 메소드 호출 ###"); } public void display3() { //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); System.out.println("### OopOne 클래스의 display3() 메소드 호출 ###"); } }
📃OopOne.java
※ xyz.itwill06.oop 패키지에 OopOne.java 클래스 생성
package xyz.itwill06.oop; // public class OopTwo { /* private void beforeLog() { System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); } */ private OopLogger logger=new OopLogger(); // public void display1() { //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); System.out.println("### OopTwo 클래스의 display1() 메소드 호출 ###"); } public void display2() { //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); System.out.println("### OopTwo 클래스의 display2() 메소드 호출 ###"); } public void display3() { //System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); //beforeLog(); logger.beforeLog(); System.out.println("### OopTwo 클래스의 display3() 메소드 호출 ###"); } }
📃OopApp.java
※ xyz.itwill06.oop 패키지에 OopApp.java 클래스 생성
package xyz.itwill06.oop; // public class OopApp { public static void main(String[] args) { OopOne one=new OopOne(); OopTwo two=new OopTwo(); // one.display1(); one.display2(); one.display3(); // two.display1(); two.display2(); two.display3(); } }
📃OopLogger.java
※ xyz.itwill06.oop 패키지에 OopLogger.java 클래스 생성
package xyz.itwill06.oop; // public class OopLogger { public void beforeLog() { System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용"); } }