728x90

 

JAVA 객체 지향 프로그래밍 - 3. 변수와 메소드

 

※이클립스 Refactor- extract method 기능

  - 자동으로 메소드 만들어주는 기능

 

 

이전 메소드 수업에서 3가지 형태를 좀 더 풀어서 설명하시는 듯함

 1.메소드

 2.클래스 소속 메소드

 3.인스턴스 소속 형태 메소드 

 

아래부터는 코드를 점점 개선해 나아갈 것인데 뭐가 문제점이고 어떻게 개선시키는지를 중점적으로 보자

 

OOP 03_1 : 변수와 메소드 - 메소드 호출 방식

메소드 생성하고 해당 메소드를 호출 & 메소드 한 줄마다 파라미터를 지정해줘야함

많은 양의 코드에서 일일히 다 수정하기가 불가능하기에 구분자만 바꿀 수 있도록 지정 해주는 것

// OOP 03_1 : 변수와 메소드

// 1.메소드
// 2.클래스 소속 메소드
// 3.인스턴스 소속 메소드

// 1.메소드
//
// 메소드 생성하고 해당 메소드를 호출 & 메소드 한 줄마다 파라미터를 지정해줘야함  
public class OOP03_1 {
	public static void main(String[] args) {
		
		printA();			
		printA();			
		printB();
		printB();	// 이 방식은 메소드 한줄마다 바꿔줘야함. 그래서 구분자 변수 지정(String delimiter = "----";) 하는 것
	}

	public static void printA() {
		// ... 1억줄 코드
		System.out.println("----"); // 여기서 구분자를 ----으로했지만
		System.out.println("A");	// 위 printA()에서 *로 하고 싶다면?
		System.out.println("A");	// 각각의 메소드에 파라미터 지정해주는 것
									// 옆 메소드에서 printA()에 타입,변수지정
									// 및 지정변수 println하고 
									// (메소드09번 수업1,2,3에서 변환한 그거인듯)
	}
	public static void printB() {
		// ... 1억줄 코드
		System.out.println("====");
		System.out.println("B");
		System.out.println("B");
	}
}

 


 

OOP 03_2 : 변수와 메소드 - 메소드 호출 + 구분자 방식

위의 03_1 방식에서 매 메소드마다 바꾸지 않아도 되게끔 따로 구분자만 변수 처리해서 한번만 바꾸도록 개선

// OOP 03_2 : 변수와 메소드

public class OOP03_2 {
	public static void main(String[] args) {
		
		// 1억줄 코드에 자주 구분자를 바꿔줘야한다면?
		// 변수를 지정해주자 ↓↓↓
		String delimiter = "----";
		printA(delimiter);			
		printA(delimiter);	
		
		delimiter = "====";
		printB(delimiter);
		printB(delimiter);			
	}

	public static void printA(String delimiter) {
		// ... 1억줄 코드
		System.out.println(delimiter); 
		System.out.println("A");	
		System.out.println("A");	
	}
	public static void printB(String delimiter) {
		// ... 1억줄 코드
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
}

 

 


 

OOP 03_3 : 변수와 메소드 - 메소드 호출 + 구분자 + 유효범위확장 방식

 

서비스를 하고 기능이 많아지면 여러 주제의 메소드도 늘어나고 메소드만 1억개라면...?

메소드를 주제별로 정리해줄 구원자가 class

 

인자로 변수를 주는 것도 싫다면?

메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하면 됨. 다만, 유효범위 체크

 

delimiter 인식 순서 & 유효범위

메인 메소드 안에 delimiter 변수를 먼저 찾고 없으면, 이 파일 클래스 전체에서 찾는 것

printA() 메소드 안에 delimiter가 없다면, 이 파일 클래스(메인 메소드 위에)에서 찾아서 사용

// OOP 03_3 : 변수와 메소드

public class OOP03_3 {
	public static String delimiter = ""; 
	//메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하게끔 지정
	public static void main(String[] args) {
		
		// 인자로 변수를 주는 것도 싫다면?
		// 
		
		// 메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하면 됨
		// 다만, 유효범위 체크
		delimiter = "----";	// 이 delimiter = public static String delimiter = ""; 
		printA();			// 메인 메소드 안에 delimiter 변수가 없기에 이 파일 클래스 전체에서 찾는 것
		printA();	
		
		delimiter = "====";	// 이 방식은 구분자 하나만 바꿔주면 끝
		printB();
		printB();			// 이 방식은 메소드 한줄마다 바꿔줘야함. 그래서 구분자 변수 지정(String delimiter = "----";)
	}

	public static void printA() {
		// ... 1억줄 코드
		System.out.println(delimiter); // printA() 메소드 안에  delimiter가 없다면
		System.out.println("A");	   // 이 파일 클래스(메인 메소드 위에)에서 찾아서 사용
		System.out.println("A");	   // 
	}
	public static void printB() {
		// ... 1억줄 코드
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
	// public static String delimiter = ""; 
	// public static void printA() {
	// public static void printB() { 와 같이 연관성이 깊고 같은 주제 코드들이 모여있지만
	// 주제가 다 다른 코드들이 1억개라면 지옥 같이 복잡해짐
	// 이 상황에서 구원자는 class! 
	
}

 

 

728x90
반응형

+ Recent posts