0618. 메서드 Method

hyunn·2021년 6월 19일
0

Java-basic

목록 보기
10/26
post-thumbnail

메서드 Method = 함수 Function

명령어(문장) 관리 쉽게 기능단위로 묶는 문법

Java에서는 ‘함수’보다는 ‘메서드’라는 이름으로 칭함

리턴타입 메서드명(변수선언, 변수선언, … ) {
	명령문 – 변수선언, 연산자, 조건문, 반복문 …
	return 값;
}

메서드가 리턴할 값의 데이터 타입 = 리턴 타입

메서드명 : 어떤 기능을 수행하는 명령어들 이라는 의미에서 동사구 형태로 명명함

getName(), setName(), printName(), doFilter(), parseInt() 등

명사구나 전치사구 형태로 짓는 경우도 있긴함

valueOf(), toString()

메서드 실행 시 선언하는 변수 = 외부에서 넘겨주는 값을 받을 변수 -> 파라미터 ‘Parameter’

메서드 사용

미리 만들어둔 (정의해둔) 메서드를 실행하는 것

메서드 정의 definition

메서드 실행 = 호출 call

변수 = 메서드명(값, 값, … );

변수

메서드가 리턴하는 값을 받는 변수

리턴값의 데이터타입과 일치해야함

메서드명

실행할 메서드명

메서드를 실행할 때 파라미터에 넘겨줄 값 => 아규먼트 ‘argument’

메서드 파라미터의 개수, 타입과 일치해야함

변수 선언 순서와 값의 순서도 일치해야함


메서드의 4가지 유형과 사용법

1.

void m( ) {  
	~~~
}
// void – 값을 리턴하지 않음. m - 외부에서 값을 받지 않음
static void hello() {
  System.out.println("안녕하세요!");
  System.out.println("이 메서드는 어떤 값도 리턴하지 않습니다.");
}

사용

m();
hello();

파라미터 변수가 없으므로 호출 시 값을 넣으면 안됨

2.

void m(int p1, Boolean p2) {
	~~~
}

첫번째 값으로 int type의 값을 받고 두번째 값으로 boolean type의 값을 받아야함

값의 data type을 지정했으므로 순서가 바뀌면 안됨

사용

m(100, true);

3.

int m( ) {      // 메서드가 어떤 타입의 값을 리턴하는지 선언
  ~~~
  return 100;   // 메서드 실행 후 int 타입의 값을 리턴함
}

사용

int result;
result = m();  // m의 값은 무조건 int 형
m();

메서드가 리턴하는 값은 받지 않아도 됨

4.

int m(int p1, int p2) {
  if (p1 > p2)
    return p1;
  else
    return p2;
}

리턴 타입 int

파라미터 선언 p1, p2

사용

int result;
result = m(200, 300);

각각의 파라미터에 넘겨주는 200, 300 -> 아규먼트

argument : 파라미터에 넘겨주는 값

메서드 사용 예

코드추가

ex07.Exam0110 ~ 0120.java 참고 - 추가할것

statement 와 expression

printSpaces((len - starLen) / 2); 
printStars(starLen);

System.out.println();

셋 다 statement 문장

그 중 문장을 실행한 후에 결과가 생성(리턴)되는 문장 expression 표현식

Refactoring

코드는 일단 짜고나서 메서드로 묶기

주석이 달린 코드는 수정해서 주석없이도 이해되도록 정리하기 = 리팩토링 Refactoring

객체지향적으로 코드를 수정하는 방법임

SW 공학에서 결과 변경없이 소스를 재조정하는 것

간결하고 직관적인 코드가 되도록 수정하는 과정

나쁜코드 = 코드스멜 code smell 문제 일으킬 가능성 높은 코드

// ex07.Exam0110 ~ 0130 계속 반복


실행흐름 Thread

JVM을 통해 클래스 실행 시 1개의 실행흐름이 생성되어 main() 메서드에서 출발

명령어를 실행하는 흐름이 끊기지않은 실과 같아서 ‘thread’ 라 부름

main() 메서드에서 출발하는 스레드를 자바에선 ‘main thread’라 부름

자바에서는 main thread와 별개로 새 thread 만들 수 있음

중간에 다른 new thread() 만들어서 start() 가능

이렇게 서로 간의 간섭 없이 여러 개의 스레드가 동시에 진행되는 것 = ‘Multi-threading’

서버 프로그램 개발에서 사용됨



Local variable 로컬 변수

class Exam0220 {
main() {
  int a;  		// 변수 a는 main 에서만 사용 가능 => 로컬변수
  hello(10);
}
hello(int p) {  // 변수 p는 메서드 호출 시 넘어오는 값을 담는 변수 => 파라미터
  int x;  		// 변수 p, x -> hello 에서만 사용 가능 => 로컬변수
}

파라미터도 로컬변수의 일종


가변 파라미터

[리턴타입] 메서드명(타입... 변수) {...}
static void hello(String... names) {
  for (int i = 0; i < names.length; i++) {
    System.out.printf("%s님 반갑습니다.\n", names[i]);
  }
}

0 개 이상의 값을 받을 때 선언하는 방식

메서드 내부에서는 배열처럼 사용

가변 파라미터 자리에 배열을 직접 넣어도 됨

다른 타입을 넣는 것은 불가능

가변 파라미터의 메서드를 호출할 때 낱개 여러 개 값 줘도 되고 배열에 담아서 전달도 가능

배열 파라미터는 배열에만 담아서 전달

단점

여러 개 선언 불가 – 아규먼트 시작과 끝 구분X

반드시 맨 끝에 와야함 – 어떤 게 가변파라미터고 어떤게 그냥 변수인지 구분X

배열 파라미터

배열 파라미터는 여러 개 선언 가능

순서도 상관 없음


메서드 중첩 호출

result = plus(plus(plus(2, 3), 4), 5);

static int plus(int a, int b) {
  return a + b;
}

가장 안족의 메서드부터 차례로 실행됨

plus(2,3) -> plus(5,4) -> plus(9,5) 순으로 실행

메서드 호출과 로컬변수

call by Value

main() 메서드에 있는 변수 a, b

다른 메서드 swap() 메서드에서 해당 변수를 호출해 사용할 때

변수자체를 넘기는 것이 아니라 변수에 들어있는 값만 넘김

둘은 다른 변수로 규정

= call by Value

call by reference

Heap - new 명령으로 만들어진 변수를 두는 메모리영역

호출됐을 때 값이나 메모리 자체를 넘기는 것이 아니라 주소를 넘기는 것

파라미터에 주소를 넘김

JVM stack 영역 @@@@@@

JVM 메모리영역

  • Method Area

.class 명령코드
static 변수

  • Heap

new 명령어로 만드는 변수 = 인스턴스

  • JVM stack 영역 – 각각의 thread 가 사용

메서드 호출때마다 로컬변수 생성
-> 메서드 호출 끝나면 그 메서드의 로컬변수 제거

!! 레퍼런스 리턴, 파라미터 적용
ex07.Exam0310~0340 다시 복습 제대로



Eclipse IDE 사용

단축어 활용

[참고](https://iamfreeman.tistory.com/entry/Eclipse-%EB%8B%A8%EC%B6%95%ED%82%A4-%EB%AA%A8%EC%9D%8C-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-Effective-Eclipse-Shortcut-Keys)

디버깅

코드 오류 있는지 한줄씩 확인할 때 사용

step into / step over 두가지 방법으로 코드 이동

over는 전반적인 흐름

into는 그 코드 내부로 들어가는 것

전반적 흐름 보려고 하는거라 거의 step over 사용

빠져나오려면 왼쪽 위에 resume 눌러서 코드 끝까지 진행되어 끝나도록 해주고

오른쪽 위에 있는 Java EE 눌러서 빠져나온다



GitHub 블로그 만들기

  1. 내 Github로 가서 새 repository 생성
    repositpry 이름은 내아이디.github.io 로 한다
    README 체크

  2. 생성 후 설정에 가서 pages > change theme 선택해서 테마 고르기
    내 readme 파일 수정창 뜨면 commit 어쩌고 누른다

좀 기다렸다가 내아이디.github.io 주소로 들어가면 적용한 테마대로 페이지 뜬다

  1. VSCode 에서 README 파일 수정 후 깃에 커밋하면 변경 내용이 반영된다

그 외 Jekyll theme 등 여러 방법 존재- 천천히 더 알아보기

0개의 댓글