객체의 구성 멤버

🔯  메소드 (Method)

method : 방법

메소드란?   객체의 동작에 해당하는 중괄호 { } 실행 블록
  클래스 안에 정의
  메소드를 호출하게 되면 중괄호 블록의 모든 코드들이 일괄적으로 실행된다
  메소드는 객체 간의 데이터 전달 수단으로 사용된다.
  수행 후 반환 값/결과 값은 있거나 없을 수 있음
메소드 장점   이미 만들어진 로직을 재활용 할 수 있다 (코드의 양을 줄일 수 있다)
  유지보수가 유리해진다
전달값=매개변수 / 결과값=return
전달값=매개변수 / 결과값=return

 

 

 

⭐ 메소드 표현식

접근제한자 예약어 반환형  메소드명  (매개변수)
public  static  void  method_name (int a)
public class MEthod_1 {

    public static void numbering() {		// numbering 메소드 본체,아래 {부터 
        int i = 0;				
        while (i < 10) {			
            System.out.println(i);		
            i++;				
        }					// }는 그 메소드 정의
    }					
    
    public static void main(String[] args) {	
        numbering();				//numbering 메소드 호출=실행	
    }
}

 

 

⭐ 메소드 접근제한자

[접근제한자] [예약어] 자료형 변수명 [=초기값];

  구분 클래스 패키지 자손클래스 전체  
+ public O O O O 모든 클래스가 접근 가능함
# protected O O O   default범위 + 다른 패키지의 상속 받은 후손 클래스까지 접근 가능
>후손 클래스외의 다른 패키지에 있는 클래스는 접근 불가능
~ (default) O O     같은 패키지안에 있는
다른 클래스들이 접근 가능함
- private O       클래스 안에서만 접근 가능
>클래스 밖에서는 접근 불가능

 

⭐ 메소드 예약어

구분 전체
static static 영역에 할당하여 객체 생성 없이 사용
final 클래스 : 상속이 불가능한 클래스
메소드 : 상속은 가능 하지만 서브 클래스에서 오버라이딩이 금지됨
abstract 미완성된 추상 메서드, 상속하여 오버라이딩으로 완성
synchronized 동기화 처리, 고유 자원에 한개의 스레드만 접근 가능함
static final (final static) static과 final의 의미를 둘다 가짐

 

구분 전체
class 클래스명 { } (default)클래스 > 해당 패키지 안에 있는 클래스들끼리만 import없이 사용가능
public class 클래스명 { } 패키지 밖의 다른 클래스에서 사용하고자 할 경우, import 하면 사용 가능
public final class 클래스명 { } 종단 클래스 > 상속에 사용 못함
클래스의 기능 확장을 막기 위해 사용
public abstract class 클래스명 { } 추상클래스 > 미완성된 클래스
스스로 객체 생성을 못하는 클래스

⭐ 메소드 반환형

반환형
반환 값 없음을 의미  void
기본형 자료형
연산 수행 후 반환 값이
기본 자료형일 경우 사용
 byte
 short
 int
 long
 char
 float
 double
 boolean
참조형 데이터형  class
 String
 array

⭐ 메소드 매개변수

구분 전체
( ) 매개변수가 없는 것을 의미
기본 자료형 기본형 매개변수 사용 시 값을 복사하여 전달
매개변수 값을 변경하여도 본래 값은 변경되지 않음
배열 / 클래스 배열, 클래스 등 참조형을 매개변수로 전달 시에는 데이터의 주소 값을 전달하기 때문에 매개변수를 수정하면 본래의 데이터가 수정됨 (얕은 복사)
가변인자 매개변수의 개수를 유동적으로 설정하는 방법으로
가변 매개변수 외 다른 매개변수가 있으면 가변 매개변수를 마지막에 설정
*방법 : (자료형 ... 변수명)

* 매개변수의 수에 제한이 없다.

 

 

메소드 매개변수 사용예시

더보기

매개변수 ex:  public static void number (int init, int limit)

package java02;

public class MethodExam {
	/*1. 매개변수X, 리턴값X
	* [접근제한자][예약어] void 메소드명(){ 
	* }
	*/
	public void method() {
		System.out.println("매개변수가 없고, 리턴값도 없을떄");
	}
	/*2. 매개변수O, 리턴값X
	* [접근제한자][예약어] void 메소드명(매개변수){ 
	* }
	* 매개변수의 값의 타입은 기본자료형, 배열, 클래스, 가변인자
	* 매개변수의 수는 여러개일 수 있습니다. 구분은 ,(콤마)로 식별
	*/
	public void method2(int x) {
		System.out.println("매개변수는"+ x +", 리턴값은 없을때 메소드");
	}
	public void method2(int x, String s) {
		System.out.println("매개변수가 여러개이고, 리턴값이 없을때 메소드");
	}
	public void method2(int[]x,String[]s) {
		System.out.println("매개변수가 배열,형태이고 리턴값도 없을때 메소드");
	}
	/*3. 매개변수X, 리턴값O
	* [접근제한자][예약어] 반환형 메소드명(){ 
	* }
	*/	
	public int method3() {
		System.out.println("매개변수가 없고,리턴값이 있을때 메소드");
		return 10;
	}
	/*4. 매개변수O, 리턴값O
	* [접근제한자][예약어] 반환형 메소드명(매개변수){ 
	* }
	*/	
	public String method4(int x) {
		return "매개변수도 있고,리턴값도 있을때 메소드";
	}
}
메서드 종류 설 명
일반 메서드 다른 용도(기능)를 처리하기 위한 메소드
main 메서드 main 메소드는 규칙이다. 여러분이 만들고 싶은 프로그램이 있다면 여러분은 반드시
public static void main (String[ ] args) {
}가 이끄는 중괄호 안에 실행되기를 기대하는 로직을 위치시켜야한다.
이것은 약속이기 때문에 여러분은 약속을 지켜야 한다.
그렇게 코드를 작성하면 자바를 실행할 때 자바는 여러분이 작성한 main메소드를 실행하게 되는것이다
getter 메서드  get 메소드 : 값을 가져오는 것
할당된 필드(인스턴수 변수)에 기록된 값을 읽어서 요구하는 쪽으로 읽은 값을 넘기는 메소드

  표현식
[접근제한자] [예약어] 반환형 get필드명 ( )   {
      return 필드명;
}
public int getStudentNumber( )   {
      return studentNumber;
}
setter 메서드  set 메소드 : 값을 지정하는 것
할당된 필드값을 변경하는 메소드
바꿀 새 값을 전달받아 해당 필드에 대입

  표현식
[접근제한자] [예약어] void set (자료형 변수명)   {
      (this.)필드명 = 자료형 변수명;
}
public void setStudentNumber(int studentNumber)   {
      this. studentNumber = studentNumber ;
}
▶ set메서드 get메서드를 사용하는 이유
더보기
 일반적으로 객체 지향 프로그래밍에서는 이처럼 클래스의 필드를 비공개(private)로 선언한다. 필드를 비공개로 선언하면 필드에 접근해 데이터를 변경하지 못하게 막을 수 있다. 대신 getter/settere를 이용해 검증된 접근만 가능하게 한다.


클래스 선언할 때 필드는 일반적으로 private접근 제한
- 외부에서 엉뚱한 


 SET, GET 메소드를 사용하는 이유는 외부로부터 변수값에 직접적으로 접근하는것을 막기 위해서다. 직접 접근하개 되면 값이 변하게 되고 그러면 데이터 무결성이 깨질 수 있기 때문이다.


∘ 대표적으로 자바에서는 함수를 통해 값을 전달받고, 전달하고 방식을 권장하고 있다. 
또한 클래스 내에서 변수 private(캡슐화, 정보은닉)를 선언해서 외부에서 접근할 수 없도록 한다.

 

 사용예시

더보기
Student Run
package java02;

public class Student {
	private int studentNo;
	private String studentName;
	
	//getter
	public int getStudentNo() {
		return studentNo;
	}
	
	public String getStudentName() {
		return studentName;
	}
	
	//setter
	public void setStudentNo(int studentNo) {
		this. studentNo=studentNo;
	}
	public void setStudentName(String studentName) {
		this. studentName = studentName;
	}
}
package java01;

import java02.Student;

public class Run {
	public static void main (String[] args) {

		Student st = new Student();
		st.setStudentNumber(1);
		st.setStudentName("하이드");
		
		System.out.println(st.getStudentNumber());
		System.out.println(st.getStudentName());
	}
}

 

 

▶ 만약 메소드가 없다면

더보기

반복문 수업에서 0부터 9까지 출력하는 애플리케이션을 만들었다. 그런데 0부터 9까지를 3번 출력해야 한다 

메소드가 없는 경우 메소드를 사용하는 경우 (void안쓰고 return넣은 버전 )
pakage com.hy.method1;

public class Method {
    public static void main(String[] args){
    
    	int i=0;
        while(i<10){
        	System.out.println(i)
            i++
        }
    	int i=0;
        while(i<10){
        	System.out.println(i)
            i++
        }
    	int i=0;
        while(i<10){
        	System.out.println(i)
            i++
        }        
    }
}
package com.hy.method1;

	public class Method {
	    public static int numbering() {
	   
	    	int i=0;
	        while(i<10){
	        	System.out.println(i);
	            i++;
	        } 
	        return i;
	    }
	    
	    public static void main(String[] args){
	    	numbering();
	        numbering();
	        numbering();
	}
}

 

 

🔯  return

  해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어
  반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아감
return문은 현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아간다. 반환값 없는 void 반환타입을 가지는 메서드들도 return문이 존재해야한다. 하지만 사용하지 않았다 이유는 컴파일러가 메서드의 마지막에 'return;'을 자동으로 추가해주었기 때문이다.
반환타입이 void가 아닌 경우는 필수적으로 return문이 존재해야 한다. 존재하지 않으면 메서드 이름에 빨간 밑줄을 볼수 있고 그 위에 올리면 반환타입의 결과를 반드시 return해줘야한다고 알려준다. 
하나의 메서드 안에서 return문은 여러개 존재할 수 있지만 반환되는 값은 return중 하나만 반환이 된다.

 

 

✔ return예시 1

더보기
class Main {

  public static String num(int i) {
        if(i==0){
            return "zero";
        } else if(i==1){
            return "one";
        } else if(i==2){
            return "two";
        }
        return "none";
    }

    public static void main(String[] args) {
        System.out.println(num(1));
    }
}

 

// num( )에 
// 0을 넣으면 zero 
// 1을 넣으면 one 
// 2를 넣으면 two
// 그외의 숫자는 none

 

✔ return예시 2

 

 

🔯  입력과 출력

자주 사용하는 로직을 메소드로 만들어두면 호출하는 것을 통해서 간편하게 로직을 재활용 할 수 있다

package com.hy.method1;
public class Main {

  public static void numbering(int init, int limit) {	//매개변수
    int i = init;
    while (i < limit) {
        System.out.println(i);
        i++;
    }
  }

  public static void main(String[] args) {
    numbering(1, 5);  //numbering 메소드로 1과 5라는 인자를 전달한다.
  }
}

'Language > Java' 카테고리의 다른 글

Overloding(다향성) / Overriding(상속성)  (0) 2022.01.07
객체 배열  (0) 2022.01.04
Class - 생성자 (Constructor)  (0) 2022.01.03
Class - 필드(변수)  (0) 2022.01.03
package와 import  (0) 2022.01.02