1011

란이:)·2022년 10월 12일
0

공부일지

목록 보기
4/30

메소드

메인 메소드는 하나만 있음

디버깅 단계별로 체크해볼 수 있음
왼쪽 막대기에 더블클릭 하면 점이 생김 : 중단점 breakpoint
이부분에 프로그램 실행을 멈춤 상단에 debug 벌레 아이콘 키보드로는 그냥 f11
switch-> 회색블록이나 그린블록이됨 중단된 부분이 해당코드가 아직 실행 안된상태
f5: 상세하게 보기 진행 f6 : 단계별로 진행 f8: 단계를 아예넘기는
오른쪽 차에 add new expression에 app1 f6 -> app1.hashCode() ->f6 ->

메소드는 호출을 다하면 다시 호출된곳으로 다시 돌아가는 특징을 가짐
아래에 빨간색 네모는 실행중 일때 실행 끝나면 불이 꺼짐

static 예약어 가 빠져 있을 때는

java package 생성chap03-method-and-api-lecture-source
application1
package com.greedy.section01.method;

public class Application1 {

public static void main(String[] args) {
	
	/*메소드란?
	 * 메소드(method)는 어떤 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있다.
	 * */
	
	System.out.println("main() 시작됨...");
	
	/*클래스 내에 있는 메소드를 호출 하는 방법
	 * 
	 * 클래스명 사용할 이름 = new 클래스명(); // 객체 생성
	 * 사용할이름.메소드명();
	 * */
	Application1 app1 = new Application1();
	app1.methodA();
	
	System.out.println("main() 종료됨...");
	
	
}

/*메소드(method)선언*/
/*접근제한자(*public*,protected,default,private) 반환형(void, 기본자료형, 참조자료형...) 메소드명(){}
 * 접근제한자 반환형 메소드명(){
 * 
 * }
 */
/* 호출 확인을 위한 출력메소드*/
public void methodA() {
	
	System.out.println("methodA() 호출함...");
	
	methodB();
	
	System.out.println("mdthodA() 종료됨...");
	
}

public void methodB() {
	
	 System.out.println("methodB() 호출함...");
}

}

->main() 시작됨...
methodA() 호출함...
methodB() 호출함...
mdthodA() 종료됨...
main() 종료됨...

application2
package com.greedy.section01.method;

public class Application2 {

public static void main(String[] args) {
	
   System.out.println("main() 시작함...");	
   
   Application2 app2 = new Application2();
   app2.methodA();
   app2.methodC();
   app2.methodB();
   
   System.out.println("main() 종료됨...");
}

public void methodA() {
	
	System.out.println("methodA() 호출됨..");
	System.out.println("methodA() 종료됨..");
}

public void methodB() {
	
	System.out.println("methodB() 호출됨..");
	System.out.println("methodB() 종료됨..");
}

public void methodC() {
	
	System.out.println("methodC() 호출됨..");
	System.out.println("methodC() 종료됨..");
}

}
->main() 시작함...
methodA() 호출됨..
methodA() 종료됨..
methodC() 호출됨..
methodC() 종료됨..
methodB() 호출됨..
methodB() 종료됨..
main() 종료됨...

application3

맨상단에 있으면 전역변수 (필드변수) 클래스가 생성되고 종료될때까지 살아있음
밑에있으면안쪽 지역변수

int age는 매개변수
안에 넣을 값을 전달인자

package com.greedy.section01.method;

public class Application3 {

public static void main(String[] args) {
	
	/*전달인자(argument)와 매개변수(parameter)를 이용한 메소드 호출
	 * 
	 * 변수의 종류
	 * 1.지역변수
	 * 2.매개변수
	 * 3.전역변수(필드 field)
	 * 4.클래스(static) 변수
	 * 
	 * 지역변수는 선언한 메소드 블럭 내부에서만 사용이 가능하다. 이것을
	 * 지역변수의 스코프라고 한다.
	 * 
	 * 이 때 전달하는 값을 전달인자(argument)라고 부르고,
	 * 메소드 선언부 괄호 안에 전달 인자를 받기 위해 선언하는 변수를
	 * 매개변수(parameter)라고 부른다.
	 * */
	
	Application3 app3 = new Application3();
	
	/*전달인자와 매개변수를 이용한 메소드 호출 테스트*/
	/*1.전달인자로 값 전달 테스트*/
	/*호출하려는 메소드의 매개변수 선언부에 미리 선언해둔 자료형과, 갯수, 순서가
	 * 일치하게 값을 넣어 호출해야 한다.
	 * */
	app3.testMethod(40);

// app3.testMethod("40"); // 매개변수는 int형이지만 인자가 String형이기 때문에 호출할 수 없다.
// app3.testMethod(20, 30, 40); // 매개변수는 int형 1개이지만 인자는 3개이기 때문에 호출할 수 없다.
// app3.testMethod(); // 매개변수는 선언되어 있지만 인자로 값을 전달하지 않으면 호출할 수 없다.

	/*2. 변수에 저장한 값 전달 테스트*/
	int age = 20;
	app3.testMethod(age);
	
	/*자동형변환을 이용하여 값을 전달을 할 수 있다.*/
	byte byteAge = 10;
	app3.testMethod(byteAge);
	
	/*강제형변환을 이용해서 값을 전달을 할 수 있다.*/
	long longAge = 80;

// app3.testMethod(longAge); // 자동형변환을 할 수 없어서 에러 발생
app3.testMethod((int)longAge); // 강제형변환을 이용하여 자료형을 맞춘 후 호출할 수 있다(데이터 손실 주의)

	/*연산결과를 이용해서 값 전달을 할 수 있다.*/
    app3.testMethod(age * 3);
}

public void testMethod(int age) {
	
	System.out.println("당신의 나이는" + age + "세 입니다.");
	
	
}

}

-> 당신의 나이는40세 입니다.
당신의 나이는20세 입니다.
당신의 나이는10세 입니다.
당신의 나이는80세 입니다.
당신의 나이는60세 입니다.

apllication4

alt shift j 썸머리 작성 메소드 에커서놓고 단축키

package com.greedy.section01.method;

public class Application4 {

public static void main(String[] args) {
	
	/*여러 개의 전달인자를 이용한 메소드 호출 테스트*/
	Application4 app4 = new Application4();
	app4.testMethod("홍길동", 20, '남');
	

// app4.testMethod(20, "유관순", '여'); // 값의 갯수는 맞지만 순서가 다르게 전달되면 호출하지 못한다.

	/*변수에 저장된 값을 전달하여 호출할 수 있다.*/
	String name = "유관순";
	int age = 20;
	char gender = '여';
	
	app4.testMethod(name, age, gender);
	
	
}

/**
 * <pre>
 * 이름과 나이의 성별을 전달받아 한 번에 출력해주는 기능을 제공합니다.
 * </pre>
 * @param name 출력할 이름을 전달해주세요
 * @param age 출력할 나이를 전달해주세요
 * @param gender 출력할 성별을 전달해주세요. 성별은 변경되지 않을 것을 보장합니다.
 */
public void testMethod(String name, int age, final char gender) {
   
	/* 매개변수도 일종의 지역변수로 분류된다.
	 * 매개변수 역시 final 키워드를 사용할 수 있다.
	 * 지역변수에 final 키워드를 붙여 상수를 만드는 것과 동일하다.
	 * final 매개변수는 상수 네이밍 규칙을 선택적으로 따르는 경향이 있다.
	 * */
	System.out.println("당신의 이름은 " + name + " 이고, 나이는" + 
	 age + "세 이며, 성별은 " + gender + "입니다.");
	
}

}

->당신의 이름은 홍길동 이고, 나이는20세 이며, 성별은 남입니다.
당신의 이름은 유관순 이고, 나이는20세 이며, 성별은 여입니다.

application 5

package com.greedy.section01.method;

public class Application5 {

public static void main(String[] args) {
	
	/*메소드 리턴 테스트*/
	/*
	 * 모든 메소드는 내부에는 return;이 존재한다.
	 * void 메소드의 경우 return;을 명시적으로 작성하지 않아도 마지막줄에
	 * 컴파일러가 자동으로 추가를 해준다.
	 * 
	 * return은 현재 메소드를 강제 종료하고 호출한 구문으로 다시 돌아가는 명령어이다.
	 * */
	
	System.out.println("main() 메소드 시작함...");
	
	Application5 app5 = new Application5();
	app5.testMethod();
	
	System.out.println("main() 메소드 종료됨...");
}

public void testMethod() {
	
	System.out.println("testMethod() 동작 확인...");
	
	return;
	

// System.out.println("test"); // 에러 발생, return은 메소드 가장 마지막에 작성해야한다.
}

}

-> main() 메소드 시작함...
testMethod() 동작 확인...
main() 메소드 종료됨...

Applcation6

package com.greedy.section01.method;

public class Application6 {

public static void main(String[] args) {
	
	/*메소드 리턴값 테스트
	 * 
	 * 메소드는 항상 마지막에 return 명령어가 존재한다.
	 * return은 자신을 호출한 구문으로 복귀하는 것을 의미한다.
	 * 
	 * 복귀를 할 때 그냥 복귀를 할 수도 있지만, 값을 가지고 복귀할 수도 있다.
	 * 이 때 가지고 가는 값을 리턴값이라고한다.
	 * 
	 * return값을 반환하기 위해서는 메소드 선언부에 리턴 타입을 명시해주어야 한다.
	 * void는 아무 반환값도 가지지 않겠다는 리턴타입에 사용할 수 있는 키워드이다.
	 * 
	 * 반환값이 없는 경우 return 구문은 생략해도 컴파일러가 자동으로 추가해주지만,
	 * 반환값이 있는 경우 return 구문을 반드시 명시적으로 작성해야한다.
	 * 또한 메소드 선언부에 선언한 리턴타입 반환값의 자료형은 반드시 일치해야한다.
	 * */
	System.out.println("main() 메소드 시작함...");
	
	Application6 app6 = new Application6();
	app6.testMethod();
	
	
	String returnText = app6.testMethod();
	System.out.println(returnText);
	
	System.out.println(app6.testMethod());
	
	int returnIntValue = app6.testMethod2();
	System.out.println(returnIntValue);
	
	System.out.println("main() 메소드 종료됨..");
}

/**
 * <pre>
 * 문자열 형태의 반환값을 확인해보기 위한 메소드
 * </pre>
 * @return hello world라는 문자열을 반환
 */
public String testMethod() {
	
	return "hello world";
}



public int testMethod2() {
	
	return 10;
}

}
-> main() 메소드 시작함...
hello world
hello world
10
main() 메소드 종료됨..

application7

package com.greedy.section01.method;

public class Application7 {

public static void main(String[] args) {
	
	/*매개변수와 리턴값 복합 활용*/
	/*매개변수도 존재하고 리턴값도 존재하는 메소드를 이용하여 간단한 계산기 만들기*/
	int first = 20;
	int second = 10;
	
	Application7 app7 = new Application7();
	System.out.println("두 수를 더한 결과 : " + app7.plusTwoNumbers(first, second));
	System.out.println("두 수를 뺀 결과 :" + app7.minusTwoNumbers(first,second));
	System.out.println("두 수를 곱한 결과 :" + app7.multipleTwoNumbers(first,second));
	System.out.println("두 수를 나눈 결과 :" + app7.divideTwoNumbers(first,second));
	System.out.println( app7.plusTwoNumbers2(first,second));
	
}

/**
 * <pre> 
 * 매개변수로 전달 받은 두 수를 더하여 결과값을 반환하는 기능 제공
 * </pre>
 * @param first 더하기를 할 첫 번째 정수
 * @param second 더하기를 할 두번째 정수
 * @return 매개변수로 전달 받은 두 수를 더한 결과
 */
public int plusTwoNumbers(int first, int second) {
	

// int result = first + second;
// return result;

	return first + second;
	
}

 public String plusTwoNumbers2(int first, int second) {
	 
	 return first + "과(와)" + second + "의 합은" + (first + second) + "입니다.";
	 
 }

/**
 * <pre> 
 * 매개변수로 전달 받은 두 수를 뺀 결과값을 반환하는 기능 제공
 * </pre>
 * @param first 빼기를 할 첫 번째 정수
 * @param second 빼기를 할 두번째 정수
 * @return 매개변수로 전달 받은 두 수를 뺀 결과
 */
public int minusTwoNumbers(int first, int second) {
	

	
	return first - second;
	
}

/**
 * <pre> 
 * 매개변수로 전달 받은 두 수를 곱하여 결과값을 반환하는 기능 제공
 * </pre>
 * @param first 곱하기를 할 첫 번째 정수
 * @param second 곱하기를 할 두번째 정수
 * @return 매개변수로 전달 받은 두 수를 곱한 결과
 */
public int multipleTwoNumbers(int first, int second) {
	

	
	return first * second;
	
}

/**
 * <pre> 
 * 매개변수로 전달 받은 두 수를 이용하여
 * 첫번째 매개변수로 전달한 정수에서
 * 두번째 매개변수로 전달한 정수를 나누고 그 몫을 정수형으로 반환하는 기능 제공
 * </pre>
 * @param first 나누기를 할 첫 번째 정수
 * @param second 나누기를 할 두번째 정수
 * @return 매개변수로 전달 받은 두 수를 나누기한 몫 결과
 */
public int divideTwoNumbers(int first, int second) {
	
	
	return first / second;
	
}

}
->두 수를 더한 결과 : 30
두 수를 뺀 결과 :10
두 수를 곱한 결과 :200
두 수를 나눈 결과 :2
20과(와)10의 합은30입니다.

application8

static 은 기울어져 있음

실행용 class 1개 기능용 class 1개

package com.greedy.section01.method;

public class Application8 {

public static void main(String[] args) {
	
	/*static 메소드 호출*/
	
	/*static 메소드를 호출하는 방법
	 * 클래스명.메소드명(); 
	 * */
	System.out.println("10과 20의 합 : " + Application8.sumTwoNumbers(10,20));
	
	/*동일한 클래스 내에 작성된 static 메소드는 클래스명 생략이 가능하다.*/
	System.out.println("10과 20의 합 : " + sumTwoNumbers(10,20));
}

/**
 * <pre>
 * 두 수를 더한 결과를 반환하는 기능을 제공
 * static 메소드 호출을 위한 메소드
 * </pre>
 * @param first 더하기를 할 첫 번째 정수
 * @param second 더하기를 할 두 번째 정수
 * @return 두 수를 더한 결과를 리턴
 */
public static int sumTwoNumbers(int first, int second) {
	
	return first + second;
}

}
->10과 20의 합 : 30
10과 20의 합 : 30

application9 // Caluclator

최댓값과 최솟값을구하는 메소드

디버그 후

중단점에 더블클릭후 f11누르기, f5와 f6 통해서 이동가능하고 expression 창에 nmae 칸에
first 입력하면 대입할 값을 알 수있음

구글 java api 11 -> java.base -> java.util->package-> date
Date date =new Date();
int value = date.getDate();

static이 붙어있으면 Date d = Date.from();

package com.greedy.section01.method;

public class Application9 {

/*실행용 메소드*/
public static void main(String[] args) {
	
	/*최대값 최소값을 비교할 두 정수를 변수로 선언*/
	int first = 100;
	int second = 50;
	
	/*1. non-static 메소드인 경우*/
	/*클래스가 다르더라도 사용하는 방법은 동일하다.
	 * 클래스명 사용할이름 = new 클래스명();
	 * 사용할이름.메소드명();
	 * */
	Calculator calc = new Calculator();
	int min = calc.minNumberof(first, second);
	
	System.out.println("두 수 중 최소값은 : " + min);
	
	/*2.static 메소드인 경우*/
	/*다른 클래스에 작성한 static메소드의 경우
	 *호출할 때 반드시 클래스명을 기술해야한다.
	 *클래스명.메소드명();
	 * */

// int max = maxNumberof(first, second);
int max = Calculator.maxNumberof(first,second);

	System.out.println("두 수 중 최대값은 : " + max);
	
	/*주의
	 * static 메소드도 non-static 메소드처럼 호출은 가능하다
	 * 하지만 권장하지 않는다
	 * */
	int max2 = calc.maxNumberof(first, second);
	
	System.out.println("두 수 중 더 큰 값은 : " + max2);
}

}

->두 수 중 최소값은 : 50
두 수 중 최대값은 : 100
두 수 중 더 큰 값은 : 100

Calculator
package com.greedy.section01.method;

/기능 클래스/
public class Calculator {

/**
 * <pre>
 * 매개변수로 전달받은 두 수를 비교하여 더 작은 값을 가진 정수를 반환한다.
 * 단, 같은 값을 가지는 조건에 대해서는 처리하지 않는다.
 * </pre>
 * @param first 최소값 비교를 위한 첫 번째 정수
 * @param second 최소값 비교를 위한 두 번째 정수
 * @return 두 수 중 작은 값을 정수형으로 반환
 */
public int minNumberof(int first, int second) {
	
	return (first > second)?  second: first;
}

/**
 * <pre>
 * 매개변수로 전달받은 두 수를 비교하여 더 큰값을 가진 정수를 반환한다.
 * 같은 값을 가지는 조건에 대해서는 처리하지 않는다.
 * </pre>
 * @param first 최대값 비교를 위한 첫 번째 정수
 * @param second 최대값 비교를 위한 두 번째 정수
 * @return 두 수중 큰 값을 정수형으로 반환
 */
public static int maxNumberof(int first, int second) {
	
	return(first > second)? first: second;
}

}
-> com.greedy.section02.package_import
application1

패키지선택후 f2단축키는 rename 이름 변경 및 수정

package com.greedy.section02.package_import;

public class Application1 {

public static void main(String[] args) {
	/*non-static인 경우*/
	com.greedy.section01.method.Calculator calc 
	    = new com.greedy.section01.method.Calculator();
	
	int min = calc.minNumberof(30,20);
	
	System.out.println("30과 20중 더 작은 값 : " + min);
	
	/*static인 경우*/
	int max = com.greedy.section01.method.Calculator.maxNumberof(30,20);
	System.out.println("30과 20중 더 큰 값 : " + max);
	
}

}

-> 30과 20중 더 작은 값 : 20
30과 20중 더 큰 값 : 30

method. (은클래스에서만 사용가능하며 모든 클래스 안에있는 걸로 선언하겠다는뜻)

application2

빈도가 많은 것을 import 를 쓰고 빈도가 낮은것을 수동으로 적기
=> 이름이 같은걸 선언할 경우.?

package com.greedy.section02.package_import;

import com.greedy.section01.method.Calculator;
import java.util.Date;
//import java.sql.Date;

/static import인 경우/
import static com.greedy.section01.method.Calculator.maxNumberof;

public class Application2 {

public static void main(String[] args) {
	
	/*import : 서로 다른 패키지에 존재하는 클래스를 사용하는 경우
	 * 패키지명을 포함한 풀 클래스 이름을 사용해야한다.
	 * 하지만 매번 다른 클래스의 패키지명까지 기술하기에는 번거롭다.
	 * 그래서 패키지명을 생략하고 사용할 수 있도록 한 구문이 import 구문이다.
	 * 
	 * import는 package 선언문과 class 선언문 사이에 작성하며
	 * 어떠한 패키지 내에 있는 클래스를 사용할 것인지에 대해 미리
	 * 선언하는 효과를 가진다.
	 * */
	Calculator calc = new Calculator();
	int min = calc.minNumberof(50, 60);
	
	System.out.println("50과 60중 더 작은 값은 : " + min);
	
	/*static method인 경우 import*/
	
	int max = Calculator.maxNumberof(50, 60);
	
	System.out.println("50과 60중 더 큰 값은 : " + max);
	
	/*추가로 static 메소드를 호출할 때 클래스명도 생략하고 사용할 수 있다.*/
	int max2 = maxNumberof(100, 200);
	System.out.println("100과 200중 더 큰 값은 : " + max2);
	
	java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
		
} 

}
->50과 60중 더 작은 값은 : 50
50과 60중 더 큰 값은 : 60
100과 200중 더 큰 값은 : 200

com.greedy.section03.api.math
application1

코드에 f3 번 혹은 컨트롤 누르면서 코드 누르면 코드에대한 상세보기가 뜬다.

package com.greedy.section03.api.math;

import java.lang.Math;

public class Application1 {

public static void main(String[] args) {
	
	/*API란 ?
	 * 
	 * Application Programming Interface는 응용프로그램에서 사용할 수 있도록
	 * 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할수 있도록 만든 인터페이스를
	 * 뜻한다.
	 * -> 쉽게 얘기해서 우리가 구현할 수 없거나 번거로운 기능을 JDK를 설치하면
	 * 사용할 수 있도록 제공해놓은 소스코드들을 의미한다.
	 * 
	 * -> 더 쉽게 말해 누가 작성해놓은 소스코드이니 가져다 쓰는 방법을 본다
	 * */
	/*다른 패키지에 있는 클래스를 사용하는데 예외적으로 java.lang 패키지에 있는
	 * 내용은 별도의 import를 하지 않아도 사용할 수 있게 정의되어있다.
	 * */
	/*java.lang.Math
	 * 
	 * Math클래스는 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해놓은 클래스
	 * */
	System.out.println("PI 변수 " + java.lang.Math.PI);
	
	System.out.println("-7의 절대값 : " + java.lang.Math.abs(-7));
	
	System.out.println("-1.25의 절대값 : " + Math.abs(-1.25));
	
	System.out.println("10과 20중 더 작은 것은 : " + Math.min(10,20));
	System.out.println("20과 30중 더 큰 것은 : " + Math.max(20, 30 ));
	
	System.out.println("난수 발생 : " + Math.random());
}

}

->
PI 변수 3.141592653589793
-7의 절대값 : 7
-1.25의 절대값 : 1.25
10과 20중 더 작은 것은 : 10
20과 30중 더 큰 것은 : 30
난수 발생 : 0.35041167023944153

application2
package com.greedy.section03.api.math;

public class Application2 {

public static void main(String[] args) {
	
	/*난수의 활용*]
	 * 
	 * Math.random()을 이용해 발생하는 난수는 0.0부터 1.0전까지의 실수 범위의
	 * 난수값을 반환한다.
	 * */
	
	/* 원하는 범위의 난수를 구하는 공식*/
	/* (int) (Math.random()* 구하려는 난수의 갯수) + 구하려는 난수의 최소값*/
	/*0~9까지의 난수 발생*/
	int random1 = (int) (Math.random()* 10);
	System.out.println("0부터 9사이의 난수 : " + random1);
	
	/*1~10 까지의 난수 발생*/
	/*10-1+1 -> 10*/
	int random2 = (int) (Math.random() * 10) + 1;
	System.out.println("1부터 10사이의 난수 : " + random2);
	
	/* 10~15까지의 난수*/
	/*15-10 +1 ->6*/
	int random3 = (int) (Math.random() * 6 ) +10;
	System.out.println("10부터 15사이의 난수 : " + random3 );
	
	/*-128 ~ 127까지의 난수 발생
	 * 127 - (-128)
	 * 127 + 128 +1 => 256
	 * */

// int random4 = (int) (Math.random() 256) + (-128);
int random4 = (int) (Math.random()
256)-128;

    System.out.println("-128부터 127까지의 난수 발생 : " + -128);
}

}
-> 0부터 9사이의 난수 : 2
1부터 10사이의 난수 : 4
10부터 15사이의 난수 : 11
-128부터 127까지의 난수 발생 : -128

application3
package com.greedy.section03.api.math;

import java.util.Random;

public class Application3 {

public static void main(String[] args) {
	
	/*java.until.Random 클래스*/
	
	/*
	 * 원하는 범위의 난수를 구하는 공식
	 * random.nextInt(구하려는 난수의 갯수)*/
	
	Random random = new Random();
	
	/*0부터 9까지 난수 발생*/
	int randomNumber1 = random.nextInt(10);
	System.out.println("0부터 9까지의 난수 : " + randomNumber1);
	/*1부터 10까지의 난수 발생*/

	int randomNumber2 = random.nextInt(10) +1;
	System.out.println("1부터 10까지의 난수 : " + randomNumber2);
	
	/*20부터 45까지의 난수 발생*/
	int randomNumber3 = random.nextInt(26) +20;
	System.out.println("20부터 45까지의 난수 : " + randomNumber3);
}

}

-> 0부터 9까지의 난수 : 7
1부터 10까지의 난수 : 2
20부터 45까지의 난수 : 36

깃랩 문제풀기

문제풀기

profile
FE Developer 🐥

0개의 댓글