처음 프로그래밍을 배울 때 함수와 메소드가 같은 것인줄 알았다
함수란
- 프로그래밍의 기본적인 구성요소로, 입력(인자,매개변수) 등을 받아서 작업을 실행하고 결과를 출력하는 독립적인 코드블록이다
-특정 클래스의 멤버로 속하지 않은 전역적인 함수 전역함수 등을 말한다
function hello(){
console.log("hello");
}
let obj = {
sayHello: function (){
console.log("hello");
}
}
hello();//함수
sayHello();//객체에 속한 메소드
메소드란
- 특정 객체 /클래스 에 속한 함수를 의미한다
- 메소드는 클래스의 멤버이며 해당 객체또는 클래스를 통해서 호출한다
- 특정 기능들을 모아놓은 코드의 집합체이고 그 기능을 수행한 후 결과 값을 반환한다( 반환이 없을 수도 있음)
class Solution {
fun hello(){
println("hello")
// 여기서 println은 표준 라이브러리 함수 임!
}//클래스 내부에 선언되어있으니 메소드
}
fun sayHello(){
println("hello")
}
//확장함수
메소드 선언 과 본문
public static int add(int a, int b) {
return a + b;
}
}
//제어자 반환타입 메소드이름(매개변수){
// 메소드 본문
//
// 메서드본문은 호출하는 곳에서 선언을 알지만 본문은 모른다
// return 문으로 반환결과를 적어준다
! 자바는 함수안에 함수를 정의할 수 없다
여태 쓰던 자바스크립트와 코틀린 과의 차이이니 습관적으로 쓰지 않도록 하자
메서드 호출과 용어 정리
public class Practice {
public static void main(String[] args) {
int sum = add(3,4); //호출 call
//여기서 인수 인자값은 3,4
}
public static int add(int a, int b) {
return a + b;
}
// 메서드 선언에서 사용한 변수는 매개변수 / 파라미터라고 한다
// 메서드를 호출할 때 인수를 넘기면 매개변수에 대입해서 결과를 만든다
}
인수, 인자 와 매개변수 , 파라미터를 혼용하지 말자
매개변수가 없거나 반환타입이 없는 경우
public static void main(String[] args) {
print01();
print02();
}
public static void print01(){
System.out.println("Hello World");
}
public static void print02(){
System.out.println("Bye World");
}
프린트01 과 프린트 02는 매개변수가 없고 반환값도 없다
반환타입
public class Practice {
public static void main(String[] args) {
boolean result = odd(2);
System.out.println(result);
}
public static boolean odd(int n){
if(n%2==1){
return true;
}//else{
// return false;
//}
}
반환 타입이 있으면 반드시 값을 반환 해야한다
return이 없다 - 반환 값이 없다 - 오류가 난다
return
public static void main(String[] args) {
check(10);
check(20);
}
public static void check(int age){
if(age <18){
System.out.println("18살 미만은 담배 못삼");
return;
}
System.out.println("담배사라");
}
메서드는 return을 만나면 메서드를 종료 시킨다
자바의 메서드 호출과 값 전달 방식 ( call by value)
자바는 항상 변수의 값을 복사해서 대입한다
public static void main(String[] args) {
int num1 = 5;
System.out.println("1. changeNumber 호출 전, num1: " + num1); //5
changeNumber(num1);
System.out.println("4.changeNumber 호출 후 num1"+ num1);//5 함수를 끝내고
다시 변수를 호출햇을때는 5가 나온다
}
public static void changeNumber(int num2) {
System.out.println("2. changeNumber 변경 전, num2: " + num2);//5
num2 = num2*2;
System.out.println("3. changeNumber 변경 전, num2: " + num2);//10
}
4번의 변수를 출력하면 5가 나온다 함수가 변수 자체의 영향을 주지는 않는다
public static void main(String[] args) {
int num1 = 5;
System.out.println("changeNumber 호출 전, num1: " + num1);//5
num1 = changeNumber(num1);
System.out.println("changeNumber 호출 후, num1: " + num1);//10
}
public static int changeNumber(int num2) {
num2 = num2*2;
return num2;
}
이 경우에는 num1에 대입을 했기때문에 변수 num1이 변화한다
메서드 형변환
메서드를 호출할 때도 형변환이 적용된다
명시적형변환
public static void main(String[] args) {
double number = 1.5;
// printNumber(number);//타입 안맞음 오류
printNumber((int)number);
//명시적 형변환을 적용했다
}
public static void printNumber(int n) {
System.out.println(n);
}
자동형변환
public static void main(String[] args) {
int number = 100;
printNumber(number); // int 에서 double 로 자동 형변환
}
public static void printNumber(double number) {
System.out.println(number);
}
//int<long<double 작은 값을 큰값 파라미터로 넘기면 자동으로 형변환이 된다
메서드 오버로딩
메서드 오버로딩이란
같은 이름의 메서드를 중복하여 정의하는 것을 말한다
한 클래스 내에서 같은 이름의 메서드를 두개이상 가질수 없지만 매개변수의 갯수나 타입을 다르게 하면 하나의 이름으로 다른메서드를 여러개 만들수 있다
메서드 시그니처 =메서드 이름 + 매개변수 타입
메서드 이름이 같아도 시그니처가 다르다면 다른 메서드로 간주한다
public static void main(String[] args) {
System.out.println("1:" + add(1,2));
System.out.println("2:"+add(1,2,3));
System.out.println("3:"+add(1,2.4));
}
//1번 메서드
public static int add(int a, int b) {
System.out.println("1번 메서드");
return a+b;
}
public static int add(int a, int b, int c) {
System.out.println("2번 메서드 매개변수의 갯수가 다르다");
return a+b+c;
}
public static double add (int a , double b){
System.out.println("3번 메서드 매개변수의 타입이 다르다");
return a+b;
}
int add(int a, int b)
double add(int a, int b)
* 반환 타입은 시그니처로 간주하지 않음
'언어 > JAVA' 카테고리의 다른 글
문자열 포매팅 (0) | 2024.06.21 |
---|---|
문자열 내장 메서드 (0) | 2024.06.21 |
자바 기초문법 / 문자 <-> 숫자 (0) | 2024.06.05 |
자바 기초문법 / 형변환 (1) | 2024.06.05 |
자바 기초문법 / 반복문 (0) | 2024.06.05 |