반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

자바의 클래스구조(필드부,생성자부,메서드부)3 본문

JAVA

자바의 클래스구조(필드부,생성자부,메서드부)3

yeonee 여니 2023. 5. 8. 12:00
728x90
반응형
SMALL

안녕하세요.

#yeoneeblog 여니입니다 :)

 

* 메소드

* [표현법]

* 접근제한자 예약어(생략가능) 반환할값의자료형 메소드명(매개변수(생략가능)){

* // 실행할 코드;

* return 반환할 값;(반환할 자료형이 void인경우 생략가능)

* }

* 한번 정의한 메소드는 얼마든지 다시 호출해서 사용할수 있다.

*

* 메소드? 실행해야할 명령어의 집합

*/

 

// 1. 매개변수가 없고, 반환값도 없는 메소드

public void method1() {

System.out.println("매개변수와 반환값이 둘 다 없는 메소드 입니다.");

 

//return; void메소드의 경우 생략이 가능함. JVM이 자동으로 마지막줄에 생성해준다.

}

 

// 2. 매개변수가 없고 반환값은 있는 메소드

public int method2() {

System.out.println("매개변수가 없고 반환값은 있는 메소드입니다.");

 

return (int)(Math.random() * 100 + 1);

}

 

// 3. 매개변수가 있고 반환값은 없는 메소드 -> setter함수 같은 녀석들

public void method3(int num1, int num2) {

 

System.out.println("매개변수가 있고 반환값은 없는 메소드입니다. ");

 

// num1과 num2의 값을 비교하여 결과를 출력하는 메소드

// 최소값 : xx

// 최대값 : xx

int min = 0; // 두수중에 작은값을 보관할 변수

int max = 0; // 두수중에 큰 값을 보관할 변수

 

if(num1 - num2 > 0) {

min = num2;

max = num1;

}else {

min = num1;

max = num2;

}

System.out.println("최소값 : "+min+"\n최대값 : "+max);

}

 

// 4. 매개변수도 있고 반환값도 있는 메소드

public int method4(int a, int b) {

 

System.out.println("매개변수도 있고 반환값도 있는 메소드다");

 

 

return a*b;

}

 


 

* static 메소드

* [표현법]

* 접근제한자 static 예약어 반환형 메소드명(매개변수){

* 수행내용;

* return;

* }

*

* - 호출 시 객체 생성할 필요가 없음

* - 프로그램 시작시에 정적메모리 영역(static영역)에 메소드가 저장되어있기 때문이다.

* - 클래스명.메소드명(전달값);으로 호출하면 된다.

* - 예약어, 매개변수, return 구문(반환형이 없는경우)는 생략 가능하다.

*

*/

 

public static void method1() {

System.out.println("매개변수와 반환값이 없는 메소드");

}

 

public static String method2() {

return "매개변수는 없지만 반환값은 있는 메소드";

}

 

public static void method3(String name, int age) {

 

System.out.println(age+"살의 "+name+"님 반갑습니다.");

}

 

public static int method4(int num1, char op) {

/*

* static 메서드안에서는 static이 아닌 field멤버가 접근이 불가능하다.

* 스태틱메서드는 프로그램 시작시에 정적메모리 영역에 들어가는데,

* 이때 스태틱으로 선언된 필드(전역변수)도 함께 정적메모리 영역에 들어갈것임.

* 따라서 같은 범위안에 있으니 사용이 가능,

* but 스태틱으로 선언되지 않은 전역벽수는 스태틱메모리에 올라가는 시점에 생성이되지 않았으므로

* 사용이 불가능하기때문에 에러 발생.

*

*/

return num1 * count;

}

 


 

public static void main(String[] args) {

System.out.println("============================================");

 

MethodTest1 mt1 = new MethodTest1();

mt1.method1();

 

int a = mt1.method2();

System.out.println("랜덤값은 ?? "+a);

 

mt1.method3(2 , 1);// 반드시 자료형을 맞춰서 매개변수에 대입해줘야한다.

 

System.out.println(mt1.method4(5, 55));

 

MethodTest1 mt2 = new MethodTest1();

//mt2.method1();

 

System.out.println("======================================================");

// static 메소드의 경우에는 new 생성자 구문으로 객체를 생성할 필요가 없다.

// static이 붙은 클래스 변수와 마찬가지로 메소드 또한 프로그램 실행시에 정적메모리영역에 저장된다.

// 클래스명.필드명 == static영역의 주소값.

// 클래스명.메서드명() == static영역의 주소값().

MethodTest2.method1();

 

System.out.println(MethodTest2.method2());

 

MethodTest2.method3("소연", 13);

 

MethodTest2.method4(1 , '+');

}

 


 

public class Overloadingtest {

// 메소드 오버로딩

// - 한 클래스 내에 같은 메소드명으로 정의할수 있는 방법.

// - 매개변수의 자료형의 개수, 순서가 다르게 작성되어야만 한다.

// - 단, 매개변수명, 접근제한자, 반환형은 메소드 오버로딩에 영향을 주지 않는다.

 

public void test() {

 

// 메소드 오버로딩이 잘 되어있는 대표적인 메소드

// System.out.println

 

}

 

public void test(int a) {

 

}

 

public void test(double a) {

 

}

 

public void test(int a , String s) {

 

}

 

public void test(int a , double s) {

 

}

 

public void test(String s , int a) {

 

}

 

public void test(int a, int b) {

 

}

//

// 매개변수명과는 상관없이 자료형의 갯수와 순서가 같아서 에러가 발생함.

// 즉, 매개변수의 자료형의 개수와 순서가 다르게 작성되어야 한다.

// public void test(int c , int d) {

//

// }

 

// - 반환형이 다르다고 오버로딩이 적용되지 않는다.

// - 메소드를 호출하는 시점에 매개변수가 동일하기 때문에 에러가 발생한다.

// 즉, 반환형과 상관없이 매개변수의 자료형의 개수와 순서가 다르게 작성되어야한다.

// public int test(int a, int b) {

//

// }

 

// - 접근제한자가 다르다고 오버로딩이 적용되지 않기때문.

// 즉, 접근제한자와 상관없이 "매개변수의" 자료형의 개수 및 순서가 다르게 작성되어야한다.

// private void test(int a, int b) {

//

// }

 

728x90
반응형
LIST