[Spring 7-1] OOP의 단점

임승현·2023년 2월 16일

Spring

목록 보기
18/46

🐧OOP의 문제점 예시

  1. 중복된 코드가 많다
    → 가독성, 유지보수의 효율성이 떨어진다
  2. 중복된 코드가 많을시 클래스를 만들어서 메소드 호출(📃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("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용");	
	}
}

0개의 댓글