[Java] Method 와 Static

JOY·2023년 3월 6일
0

[Java]

목록 보기
6/15
post-thumbnail

메소드

메소드 특징

  • 객체 안에 선언되어 객체가 가지고 있는 기능이다.
  • 반드시 class내부에 선언된다.
  • 호출해서 사용한다.(호출되기 전에는 실행 안됨.)
  • 재귀호출가능(자기 자신 안에서 자신을 호출)
  • Method 마지막 구현부에서 return 할 수 있다.
    (특정한 값을 호출한 주체에게 return 한다.)
  • 재사용 목적 – 코드의 중복을 피할 수 있다

메소드 작성법

  modifiers returnType method이름( [DataType 변수이름, DataType 변수이름, ...] ){
       기능구현 ;
  }

1) modifiers : 제한자, 0개 이상
접근 제한자 + 기타 제한자

  • 접근 제한자 종류
  • public : 어디서나 접근 가능
  • protected : 폴더가 달라도 상속관게라면 어디서나 접근 가능
  • default : 같은 package내에서 아무나 접근 가능
  • private : 같은 클래스 내부에서만 접근 가능
    접근 범위 :public > protected > default > private
  • 기타 제한자 종류
  • default, static, final, abstract, synchronized

👉 클래스 앞에 올 수 있는 접근 제한자 : public or 생략(default)

2) returnType : 반드시 1개만 작성

  • void : 리턴값 X
  • 기본형(primitiveType) : int, short, double, char 등
  • Object type(참조형)
    !! 기본형과 참조형은 반드시 구현부 마지막 줄에 return 가지고갈 값; 필수

3) 메소드 이름

  • 첫글자 소문자($,언더바 가능)
  • camel표기법
  • 두번째 글자부터 숫자 가능

4) (DataType 변수이름, ... )

  • 인수, 매개변수, Parameter

메소드 호출 방법 2 - 3 - 1

1) 객체 생성해서 접근하는 방법
- 호출하려는 메소드를 감싸고 있는 클래스를 생성한다.
- 클래스명 변수명 = new 클래스명();
- 메소드 리턴값 없을 때 : 변수명.메소드명(인수값, ...);
- 메소드 리턴값 있을 때 : 리턴타입 변수 = 변수명.메소드명(인수값, ...);
2) static붙은 메소드 호출하는 방법
- 객체 생성 하지 않고 클래스이름.메소드이름(인수값, ....);
ex) Math.random();
Integer.parseInt(문자열);
System.out;
System.in;
3) 같은 클래스 내부에서 메소드 호출 방법
this.메소드이름(인수값, ...) / this 생략 가능

class Test{

	public void aa() {

	}

	public int bb(String s) {
		return 4;
	}

	public String cc(int i, int j) {
		return "안녕";
	}

   class Main{
 		Test t = new Test();
 		t.aa();
 		t.bb("A");
 		t.cc(1,2);
	}
	

static

  • static
  • 객체 생성 여부에 상관 없이 메모리가 할당됨
    ㄴ 단점 : static 많이 쓰면 메모리 낭비

1) class 앞

  • class 앞에는 올 수 없다. (단, Inner class에는 사용가능)
  • 클래스 생성 시, Static은 객체를 여러개 생성해도 무조건 하나로 본다.

2) 메소드 앞

  • 객체생성 없이 class이름.mehtod이름( [값,값,…] ); 호출 가능
  • static method는 일반(static이 없는) method 호출 안됨
  • static method는 static method만 호출 가능.
  • static method안에서 this 키워드 사용 안됨.
    같은 class 내에 static method 호출할 때 => method이름([값, ... ] );

    non-static 에서 static,non-static 호출 가능
    그러나 non-static을 this로 호출하는건 권장하지 않음
    클래스명.메소드명 으로 호출 하는 것을 권장
    static은 static만 호출 가능, non-static 호출 불가능

        

3) 변수 앞

  • 전역변수 앞에만 사용가능 ex) static int i;
  • 객체생성 없이 외부에서 class이름.변수이름 호출가능
  • static변수는 같은 class들이 공유하는 공유변수이다

4) static 블럭
ex) static{
기능 구현 ;
}
⇨ class 내부에 선언되어 main method보다 먼저 실행된다.
⇨ method, 생성자 등의 영역 안에서는 선언 될 수 없다.
⇨ 주로 사전 초기화 작업, DB 연결, 환경 설정 및 세팅, 데이터 로딩 작업에서 할 때 많이 사용
⇨ 최초에 딱 1번만 실행됨
static 안에서 static에 접근할 수 없다.

메서드 호출방법 2번) 아래 코드의 클래스와 메서드 코드 구현하기

int i = Integer.parseInt("A");
String s = Integer.toString(4);
double no = Math.random();

↓↓↓↓↓↓↓↓

public class Integer{
		public static int parseInt(String s){
			기능;
			return 숫자값;
		 }
		 public static String toString(int i){
			기능;
			return 문자열값;
		}
	}

	public class Math{
		public static double random(){
			기능;
			return 난수값;
		}
	}

this

this : 현재 생성된 객체를 뜻함

1) this.변수이름 : 현재 객체의 전역변수를 뜻함
- 지역변수와 전역변수 이름 같을 때 주로 사용)
2) this.메소드이름() : 현재 객체의 메소드를 호출
3) this(값, 값, ...) : 현재 객체의 다른 생성자 호출
- 반드시 생성자 구현부 첫줄에서만 가능!

지역변수는 자동 초기화 되지 않아서 초기화 시켜주어야 함
static 필드는 동일한 객체를 여러개 만들어도 하나이다 => 공유 변수
=> singlton 패턴에서 사용

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글