웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.04

shine94 2020. 2. 5. 00:02

1. 메소드
 : 이름()
   단, 키워드()는 메소드가 아니다.

 


2. 메소드 구성 요소

 


3. 메소드 선언
    (1)리턴타입 (2)메소드명(자료형 (3)매개변수, ...)  {
                   (4)실행할 문장;
                   (5)return 리턴값;
    }
    
    (1) 리턴값의 타입 작성, 없으면 void로 작성
    (2) 동사로 작성한다(연필(매개변수)을 쓴다(메소드)) 
    (3) 생략이 가능하다. 외부에서 들어올 값이 있다면 반드시 적는다.
    (4) 생략이 가능하다.
    (5) 생략이 가능하다.

 


4. 메소드 사용
    메소드명(값, ...);
    메소드명();

 


5. 메소드 주의사항
 : 메소드 선언시 반드시 메소드 밖에서 선언하고,
   메소드 사용시 반드시 메소드 안에서 사용한다.

 


6. 메소드 선언 순서
(문제) 두 정수의 덧셈 메소드 구현
         ① 메소드 이름을 생각한다.
             plus, add, sum, ....
             add() {}
         ② 매개변수를 생각한다.
             add(int num1, int num2) {}
         ③ 실행할 문장을 생각한다.
             add(int num1, int num2) {
                      int result = num1 + num2;
             }        
         ④ 리턴값을 생각한다
             add(int num1, int num2) {

                       int result = num1 + num2;

                       return result;
             }       

         ⑤ 리턴타입을 결정한다.
             int add(int num1, int num2) {

                       int result = num1 + num2;
                       return result;
             }

 

 

7. 에러는 심각한 오류, 예외는 컴퓨터에 지장이 없는 가벼운 오류
 : 주로 실무에서는 에러와 예외를 구분하지 않고 오류라고 말한다

 

 

8. 오늘 배운 소스 코드

1) Nike

package day15;

import javax.swing.JOptionPane;

public class Nike {

	public static void main(String[] args) {
		//강남점, 홍대점, 잠실점
		//일반점, 키즈점
		//강남점 일반점 매출액을 입력하세요.
		//지점별 총, 평균 매출액(강남, 홍대, 잠실)
		//연령병 총, 평균 매출액(일반, 키즈)
		//나이키 총, 평균 매출액
		//평균 매출액보다 높은 매장은 인센티브 매장으로 출력
		//대화상자 (JOptionPane) 사용

		//매출액은 만원 단위, 평균은 백원 단위
		String[] branchName = {"강남점", "홍대점", "잠실점"};
		String[] ageName = {"일반점", "키즈점"};

		int[][] arrIncome = new int[2][3];

		int[] arBranchTotal = new int[3];
		double[] arBranchAvg = new double[3];

		int[] arAgeTotal = new int[2];
		double[] arAgeAvg = new double[2];

		int total = 0;
		double avg = 0.0;

		int length = 0;
		
		String msg = "";
		
		boolean check = false;

		for (int i = 0; i < arrIncome.length; i++) {
			//나이키 평균 매출액 계산을 위한 총 배열의 길이 계산 필요
			length += arrIncome[i].length;

			//사용자에게 지점별, 연령별 매출액 입력받기
			for (int j = 0; j < arrIncome[i].length; j++) {
				arrIncome[i][j] = Integer.parseInt(JOptionPane.showInputDialog(branchName[j] + " " +
						ageName[i] + " 매출액을 입력하세요[단위 : 만원]"));

				//나이키 총 매출액
				total += arrIncome[i][j];

				//지점별 총 매출액
				arBranchTotal[j] += arrIncome[i][j];

				//연령별 총 매출액
				arAgeTotal[i] += arrIncome[i][j];

			}

			//연령별 평균 매출액(2번 반복)
			arAgeAvg[i] = Double.parseDouble(
					String.format("%.2f", (double)arAgeTotal[i] / arrIncome[i].length));

		}

		//지점별 평균 매출액(3번 반복)
		for (int i = 0; i < arBranchAvg.length; i++) {
			arBranchAvg[i] = Double.parseDouble(
					String.format("%.2f", (double)arBranchTotal[i] / arrIncome.length)); 

		}

		//나이키 평균 매출액
		avg = Double.parseDouble(String.format("%.2f", (double)total / length));
		
        
        
		//한 번에 값을 출력하기 위해 출력이 필요한 값을 msg에 누적 저장==================
		//지점별 총, 평균 매출액(강남, 홍대, 잠실)
		for (int i = 0; i < arBranchTotal.length; i++) {
			msg += branchName[i] + " 총 매출액 : " + arBranchTotal[i] + " 만원\n" + 
			branchName[i] + " 평균 매출액 : " + arBranchAvg[i] + " 만원\n";
		}
		
		//연령병 총, 평균 매출액(일반, 키즈)
		for (int i = 0; i < arAgeTotal.length; i++) {
			msg += ageName[i] + " 총 매출액 : " + arAgeTotal[i] + " 만원\n" + 
			ageName[i] + " 평균 매출액 : " + arAgeAvg[i] + " 만원\n";
		}

		//나이키 총 매출액, 평균 매출액
		msg += "나이키 총 매출액 : " + total + "만원\n";
		msg += "나이키 평균 매출액 : " + avg + "만원\n";
		
		msg += "★인센티브 매장★\n";
		
		for (int i = 0; i < arrIncome.length; i++) {
			for (int j = 0; j < arrIncome[i].length; j++) {
				if(arrIncome[i][j] > avg) {
					//입력한 매출액이 나이키 평균 매출액보다 큰 경우
					//인센티브 매장 누적 저장 후 
					//check를 true로 변경
					//check는 인센티브 매장 유무 확인을 위한 Flag
					msg += branchName[j] + " " + ageName[i] + "\n";
					check = true;
				}
			}
		}
		
		if(!check) {
        	//check가 false일때
			msg += "없음";
		}
        
		//==============================================================================
        
		JOptionPane.showMessageDialog(null, msg);
		

	}
}

 

2) MethodTest

package day15;

public class MethodTest {
	//따로 선언없이 바로 메인메소드에 사용하고 싶다면 리턴타입 앞에 static을 붙여주면 됨
	//그럼 컴파일시 메인 메소드와 함께 가장 먼저 메모리에 할당되기 때문에 바로 사용이 가능함
	//f(x) = 2x+1
	int f(int x){
		return 2*x+1;
	}
	
	//메인메소드 : 실행프로그램을 만들어주는 역할
	//그리고 컴파일시 가장 먼저 자동 사용됨
	//static : 컴파일시 가장 먼저 메모리에 할당됨.
	public static void main(String[] args) {
		//메소드 선언시 static을 붙여줌으로써 바로 메모리에 할당해도 되나
		//메인메소드 안에서 메소드의 소속을 알려줌으로서 
		//메인메소드가 실행할 수 있겠끔 메모리에 할당시켜주는 것임
		MethodTest mt = new MethodTest();
		int result = mt.f(10);
		System.out.println(result);
	}
}

 

3) MainTest 

package day15;

public class MainTest {
	public static void main(String[] args) {
		if(args.length == 0) {
			System.out.println("None");
		}else {
			for (int i = 0; i < args.length; i++) {
				System.out.println(args[i]);
			}
		}
	}
}

** 메인 메서드의 매개변수를 접근하려면 밖에서 해야함 **

** 네트워크에서 cmd 창으로 IP주소를 넘겨받을때 사용(즉, 메인메소드는 주로 네트워크에서 사용) **

** args는 보통 IP주소나 상대방의 네트워크 포트번호 같은 것들이 담겨져서 주로 날라온다 **

** 기존에 JDK, JRE 경로 설정하는 과정에서 Program Files를 삭제하는 이유가

    cmd 창에서 공백의 역할이 매우 중요하여 작업 중에 문제가 생길 수 있기 때문이다 **

 

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_JAVA] 2020.02.05  (0) 2020.02.06
[단과_Python] 2020.02.04  (0) 2020.02.05
[단과_Python] 2020.02.03  (0) 2020.02.04
[단과_JAVA] 2020.02.03  (0) 2020.02.04
[단과_Python] 2020.01.31  (0) 2020.02.03