Programming/Back-end(Java, JSP)

[Java] 생활코딩 Java1 Method 강의 정리

Sujin Lee (Daisy) 2020. 1. 20. 23:57

 - 생활코딩 Java1 Method 강의 완강 후 적는 정리 글. 

 - 강의 url : https://opentutorials.org/course/4024

 

JAVA method - 1. 수업소개

 - 메소드 = 함수 = 복잡한 걸 정리해서 다시 단순하게 만드는 정리정돈 도구. 

 - 메소드 = 마법의 수납상자 
 - 아무리 복잡한 것도 그걸 모아서 거기다가 이름을 붙일 수 있으면 정리가 쉬워진다! (마치 서랍처럼...)
 - 연관된 코드를 모아서 그룹핑하고, 이름을 붙이면 그게 함수. (=메소드) 
   ==> 메소드를 이용하면 복잡한 코드를 깔끔하게 정리할 수 있음. 
   ==> 이미 만들어놓은 메소드 쓰면 되니까 이미 있는 코드는 다시 새로 작성할 필요가 없어짐 (재사용 가능) 


JAVA method - 2. 이미 익숙한 메소드

 - 우리는 이미 메소드를 써왔다!!
   ex) System.out.println(Math.floor(1.1));   : Math라는 클래스 안에 소속되어 있는 floor 메소드 
   ex) System.out.println("Hello World!");   : println도 모니터에 출력해주는 '메소드'!
 - 나는 메소드의 생산자이자 소비자였음. 
 - 이제는 나의 메소드를 만들어보자. 


JAVA method - 3. 메소드의 기본 형식

(▼ 메소드 사용 전) → 반복 多 재사용 不可

- 1억번씩 써야 한다고 치면 매우 비효율적... 

(▼ 메소드 사용 후) → 반복↓재사용 可 → 효율적 

 

<리팩토링> 

 - 이클립스 > 우클릭 > Refactor > Extract Method 
 - 알아서 메소드를 만들어준다 

 


JAVA method - 4. 메소드의 입력

메소드의 형식) 

public static void 메소드이름 (매개변수=parameter){
	/... (메소드내)
}
메소드이름(인자=argument); 

 


JAVA method - 5. 메소드의 출력

 

# (메소드의) return값 = (그 메소드의) 실행결과!

 

# (메소드의) return값

1. 해당 메소드의 실행결과

2. 해당 메소드를 종료시킴 (리턴값 뒤에 구문은 실행X) 

 

public static String a(){
    /...
    return a;
}

→ 메소드 a()의 실행결과는 "a"가 된다.

 

public static int one(){
    return 1;
}

 

→ 메소드 one()의 실행결과는 int 1이 된다. 

 

public static void main(){
    /...
}

→ void : return 값이 없는 메소드! 

 


JAVA method - 6. 메소드의 활용

 - 메소드 사용 → 코드 가독성↑, 재사용 可, 유지보수가 용이해짐 


JAVA method - 7. 수업을 마치며 

<공부한 것>
 - 메소드 : 서로 연관된 명령을 그룹핑해서 이름 붙인 것

<앞으로 공부하게 될 것들> 
 - 객체지향로그래밍 (OOP, Object Oriented Programming)
 - 클래스 : 서로 연관된 메소드와 변수를 그룹핑해서 이름 붙인 것 
 - 인스턴스 : 클래스를 복제해서, 서로 다른 내부적인 상태를 갖고 있는 복제본들
 - 객체 : 클래스+인스턴스 ==> 객체지향 


JAVA method - 8. 부록 - access level modifiers

 - public이 대체 뭐냐? : 접근지정어 
 - 접근지정어에는 public, protected, default, private 이 올 수 있다. (default는 생략 가능)
 - 메소드가 많아지면, 서로 연관된 메소드를 그룹핑하기 위해 클래스를 만든다. 

 

같은 클래스 내에서

사용 가능

같은 패키지 내에서

사용 가능

다른 패키지 내에서

사용 가능

어디든 상관없이

접근 가능

private O X X X
default O O X X
protected O O

O

(단, 상속받았을 때)

X
public O O

O

O

 


JAVA method - 9. 부록 - static ★

 - static 붙은 애 : 클래스 메소드 (=static 메소드) 
 - static 안 붙은 애 : 인스턴스 메소드 

 - 왜 클래스를 쓰는지 엄청 이해 잘 가게 설명해줘서 좋았다.

   (https://youtu.be/tcxf9epFD_U?list=PLuHgQVnccGMDkdt3N9tT0aZPZx5-Ri2jo&t=224)

 - 클래스 '(연관된 메소드+변수) 정리정돈의 도구'로 표현해서 이해가 쏙쏙 갔다. 

 - 인스턴스가 왜 등장했는지도 너무 잘 설명해서... 이해가 쏙쏙 갔다. 역시 생활코딩이 최고. 

 

(▼ 클래스 사용 전) : 비슷한 기능을 하는 복수개의 메소드가 따로 따로 있음 

 

(▼ 클래스 사용 후1 - 클래스 메서드) : 비슷한 기능을 하는 복수개의 메소드를 하나의 클래스로 묶어서 관리

 - 메소드 a는 클래스인 Print의 소속으로 실행되고 있음

   메소드가 클래스의 소속일 때는 → static을 붙여줘야 

 - 이렇게 클래스로 만드는 것도 좋지만, 만약  -/a/a, -/b/b, */a/a, */b/b 출력을 10억번씩 반복해야 한다면? 

 

(▼ 클래스 사용 후2 - 인스턴스 메서드) 

 - new Print(); : Print 클래스를 복제 

 - Print 클래스를 복제해서, 분신 t1 에 담는다

 - 이 분신(t1)을 '인스턴스'라고 함 

 - 메소드 a는 t1이라는 인스턴스의 소속으로써 실행되고 있음

 - 메소드가 인스턴스의 소속일 때는 → static을 빼줘야 

 

 

<인스턴스 메서드 vs 클래스 메서드> 

1. 인스턴스 메서드

 - 메서드 앞에 static 無

 - 반드시 객체를 생성해야만(new) 호출 가능

 - 인스턴스 변수와 관련된 작업을 하는 메서드

 - 즉, 메서드 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드 

 

2. 클래스 메서드

 - 메서드 앞에 static 有

 - 객체를 생성하지 않고도 호출 가능. ==> 호출형식 : '클래스이름.메서드이름(매개변수)'

 - 인스턴스와 관계 없는 (인스턴스 변수나 인스턴스 메서드를 사용하지 않는) 메서드 

 

 

<메서드 설계 시 고려사항>

1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.

2. 클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.

3. 클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다.

4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 부이는 것을 고려한다. 

 

* 클래스의 멤버변수모든 인스턴스에 공통된 값을 유지해야 하는 것이 있으면 static을 붙여준다.

* 작성한 메서드 중, 인스턴스 변수/인스턴스 메서드를 사용하지 않는 메서드에 static 붙이는 것을 고려한다.

 

 

반응형