날아라쩡글이의 블로그입니다.

메소드 본문

중앙 HTA (2106기) story/java story

메소드

날아라쩡글이 2021. 9. 8. 21:29
반응형

package 를 동일하게 작성하기 원한다면 , package에 오른쪽 버튼을 누르고 refactor ->rename -> 이름변경을 누르면 됨

method (메소드) 

  • 이름을 가진 수행문의 블록이다. 
  • 객체의 고유한 기능을 담당한다.
    • 예를 들면 String전용의 객체가 존재하는 것이다. 고유한 기능을 가지고 있는 데, 대문자에서 소문자, 특정문자 찾기, 어떤글자들이 존재하는지 체크하는 기능, 어떤 글자를 포함하는 글자를 출력하는 기능, 다른 글자로 변경하는 기능, ~ 으로 시작하고 ~ 으로 끝나는 문자열을 출력하는 기능 문자열을 비교하는 기능  문자열에 관련한 기능을 출력할 수 있고, String에 포함한다. 
    • Date라는 날짜와 시간에 대한 정보를 출력할 수 있는 객체가 존재한다. 고유한 기능으로써 현재시간과 년, 월, 시, 분에 대한 출력을 할 수 있고
    • Calender 라는 객체가 존재하는데, 년,월,일, 시 라는 출력할 수 있는 객체가 존재한다. 고유한 기능으로써는 오늘이 이달에 몇번째 달인지 ,올해의 몇번째 달인지, 음력? 양력?인지 , 객채의 고유한 기능으로써 존재한다.
    • 객체의 고유한 기능은 클래스마다 다르고 객체마다 다른 형태를 가지고 있다. class의 설계도 형식에 따라서 객체가 생성되는데, 이런 고유한 기능은 메소드에 작성이 되어있다는 것이다.  
    • class의 형태는 필드, 메소드, 생성자의 모습을 가지고 있고, class는 객체의 설계도로 객체가 가지는 기능은 메소드에 정의되어 있고 데이터는 필드에 저장되어 있다. 
  • 수행문의 블록은 이름을 가지고 있으며, 이것을 메소드의 이름이라고 한다. 
  • 메소드를 호출하면, 블록내의 모든 수행문이 수행된다. 
  • 메소드는 필드의 값을 조회하고, 수정할 수 있다. 
  • 메소드는 고유한 기능(업무로직) 수행에 필요한 수행문을 포함하고 있다. 
  • 메소드는 객체들끼리 메세지를 주고받는 용도로 사용된다. 
  • 메소드는 호출하는 측으로부터 데이터를 전달받을 수 있고, 실행 후 결과값을 호출하는 측에게 제공할 수 있다. 
  • 메소드의 구성은 선언부와 구현부로 구성되어 있다. 

메소드 선언부 

 수행문의 경우 String의 경우 3000Line의 형태를 갖고 있기 때문에 구성은 확인 할 수 없다. 선언부로 출력값이 확인이 가능하다. 선언부로 출력과 입력값을 확인하고 기능에 대해서 동사로 작성이 되어있기 때문에 확인이 가능하다. 변수와 class의 이름을 적는 것도 중요하지만, 변수와 class의 이름은 명사로 짓고, 기능은 수행의 형태를 갖고있기 때문에 동사로 적는 것이 중요하다. getSubject , userFind, moduleFine...

  • 반환타입 ( return type ) : Output
    1. 메소드 수행결과 (출력)인 반환값에 대한 데이터 타입을 적는다. 메소드를 실행하게 되면 어떤 값을 갖게되는데 그 값에 대해서 작성을 해야한다. 그리고 다른 main class에서 구현을 할 때에는 void가 아닌 이상은 같은 데이터타입의 참조변수를 작성하여, 표현을 해야한다. 
    2. 반환 값이 없는 경우 반환타입은 void만 작성할 수 있다 (즉, 반환타입이 있으면 해당 데이터 타입으로 작성을 하고 없을 경우 void를 작성해야한다. )
    3. 메소드의 반환타입이 void가 아닌 경우, 구현부 안에는 return반환문의 구문이 한 개 존재해야한다. (반환값은 1개 밖에 안된다.)
    4. return문의 구현부(구현부 내의 수행문을 실행한) 실행한 결과로 획득한 값을 호출한 즉에게 반환값으로 전달하는 수행문이다. 
    5. return문이 반환하는 반환값의 타입은 메소드 선언부의 반환타입과 일치 해야한다
    6. A라는 기능을 실행주체로 둘 경우, 실행시킨 주체에게 반환을 해야한다. return값을 사용한다. 
    7. int타입으로 실행을 했는데, String이면, 안된다. String으로 실행을 했는데 int값으로 나오지 않고 결과값은 "홍길동";이어야 한다. 
  • 메소드 이름( name, 식별자 ) : 동사 , 어떤기능을 갖는지 알 수 있는 이름으로 표현해야함
    1. 수행문을 포함하고 있는 코드 블록의 이름이다. 
    2. 메소드명은 보통 동사형이다. 
    3. 그 메소드가 수행하는 작업을 잘 나타내는 이름으로 적는다. 
  • 매개변수 ( parameter ) : Input 
    1. 매개변수는 메소드가 작업을 수행하는데 필요한 값들( 입력값)을 제공받기 위한 변수다. 
    2. 매개변수는 필요한 값의 개수만큼 변수를 선언해야하며, 각 변수들은 , 으로 구분된다. 
    3. 매개변수의 타입이 같아도 변수의 타입은 생략 할 수 없다.
    4.  
      무조건 반환값의 타입과 return값의 타입이 동일해야한다. (입력값의 타입이 항상 같을 필요는 없음)

메소드의 형태 

4가지의 메소드 형태가 있다.

  • 입력데이터는 기능이 수행할 입력받아야하는 필요한 데이터를 받아들이며, 매일 다른것을 전달 받아야함.
  • 출력데이터는 반환이 꼭 있어야한다. 기능이 수행하고 필요한 데이터를 획득해서 반환해야한다. 
  • 입력데이터에서 매개변수를 받았으면 매개변수의 데이터타입과 갯수가 동일해야한다. 그렇지 않으면 error가 발생한다. 
  • 무조건 메소드에서 선언하는 대로 구조에 맞춰서 데이터 타입이 동일해야한다. 정수값을 받을것이라고 생각하고 코딩해야한다. 

메소드 구현부 

  • 메소드를 호출했을 때 수행할 수행문을 포함하는 부분이다. 
  • 수행문이 하나도 없는 구현부도 가능하다. 
  • 메소드 선언부의 반환타입이 void가 아닌 경우 구현부 안에는 반드시 return키워드를 사용해서 값을 반환하는 수행문이 존재해야한다.

 

  • 멤버변수, 멤버메소드와 대비되는 이름은 클래스 변수와 static 메소드이다. --->class, static은 잘 만들지 않음, 만드는 일이 극히 드물음 

클래스란 필드(데이터) , 생성자, 메소드(객체가 기능에 해당하는 수행문에 코드블록) 형태를 가지고 있다. 

멤버변수와 멤버 메소드의 경우 서로 추가하거나 가져오거나 변경 할 수 있다. 요구사항에 대해서 구현할 기능을 제대로 정의해야한다. 그 기능에 맞는 메소드의 선언부의 정의가 가능하다. 1. 한글로 요구사항에 대해서 작성을 하고, 정확한 요구사항을 메소드 형식에 맞춰서 2. 메소드 선언으로 반영시켜야한다. 

코드는 똑같지만 a2, a3처럼 

필드의 내용이 다르기 때문에 다른 객체가 되었다고 할 수 있다. 변수 이름도 똑같고 메소드의 내용도 똑같아도 어떤 메소드냐에 따라서 결과값이 달라진다. 

이 메소드를 void getCurrentBalance ( ) { System.out.println("현재잔액:" + balance }로 진행해도 되지만, void의 경우 반환값이 없기 때문에 나중에 나온 totalCurrentBalance() 메소드에게 데이터를 제공하지 못하고 오직 출력만 가능하다. 

책임의 분리

출력하는 방법에 따라서 샘플구현하고, 데이터를 가지고 있는 사람의 부담이 높아진다. 3자리마다 점찍기, 뒤에 0자리 자르고 출력하기 등, 차라리 데이터를 떠넘기게되면 값을 가져간 사람이 책임져서 출력하기 때문에 담당하는 사람은 편할 수 있다. 이를 책임의 분리라고 한다. 

메소드를 만들면서 필요한 것들

메소드의 중복 정의 (Overloding) 

  • 메소드 중복정의는 하나의 클래스 안에 같은 이름의 메소드를 여러 개 정의하는 것이다. 
  • 하나의 클래스에 동일한 이름의 메소드를 여러개 정의하기 위해서는 매개변수들이 서로 달라야한다. 
  • 메소드의 중복정의 조건으로는 
    1. 반환타입은 상관없음
    2. 메서드명은 동일해야함. 
    3. 매개변수의 경우 서로 달라야한다. 매개변수 타입, 매개변수 갯수, 매개변수의 타입별 순서가 다를 것
    4. 사용이유 : 유사란 기능은 같은이름으로 통일성 있게 정의하자. 
    5. 매개변수의 타입이나 갯수만 다르고, 비슷한 기능을 수행하는 것도 일관된 하나의 이름으로 정의하는 것이 좋다. 객체에 구현된 비슷한 기능을 사용하기 쉬워진다.
    6. 매개변수의 이름을 서로 다르게 정의하는 것은 메소드 중복정의의 조건이 아니다. 
  • 메소드 중복정의 된 객체 생성하기 
    •  메소드 실행시 매개변수가 서로 다른 메소드를 실행하였다. 
    •  사용자가 고르지 않아도 JVM에서 자동으로 호출하여 사용한다는 것을 확인 할 수 있었다. 
    •  일관된 이름으로 사용하고 싶은것, 그것이 목적으로 사용된다. 
    •  실제 업무에서는 중복정의는 여러종류의 수를 생각해서 작성해야한다. 
    •  출판사, 제목으로 찾는 것, 지은이로 찾는 것등 여러가지를 확인해서 작성할 수 있다.
    • 기능을 확인한 후 반환 타입을 확인해서 참조변수의 데이터 타입을 작성할 수 있다
    • 결론 : 메소드 실행시 전달한 값과 동일한 매개변수(타입/ 갯수)를 갖고있는 메소드가 실행된다. 
    • 다양한 덧셈 기능을 하나의 일관된 이름으로 실행한다. 
    • 비슷한 기능을 하나의 일관된 이름으로 사용하기 때문에 코드의 가독성과 사용성이 높아진다. 
    • 프로젝트시에는 중복정의가 많지않다. 사용하는 라이브러리에서는 많기 때문에 항상 인지하고 있어야한다. 
    • 저작권이 MIT나 ..에서 몇가지 제약조건만 지킨다면 가공해서 상업화 해도 되는 라이브러리같은 경우 호환성이 경우에 지원되거나 안될 수 있기 때문에 조건의 수를 생각해서 중복정의를 하는 것이 필요하다. 
  • 기능자체는 직접구현하기 때문에 메소드의 이름으로 어떤 기능이 들어 있는지 표시하는 것이 제일 중요하다. 
  • 길어지더라도 정확하게 구체적인 동작/ 데이터/ 조건에 대해서 작성하는 것이 중요하다.
반응형

'중앙 HTA (2106기) story > java story' 카테고리의 다른 글

Static , 정적메소드, 정적변수  (0) 2021.09.12
생성자 (constructor)  (0) 2021.09.09
객체 지향 언어  (0) 2021.09.06
배열  (0) 2021.09.03
Array문  (0) 2021.09.02
Comments