나누기 2한 거와 >>1 한거와 같다.
코드 기능을 명확하게 설명하고 싶을 때도 메서드를 활용하여 코드들을 분리한다.
contacts = grow();
메모리 위치 정보가 저장된다.
속도가 좀 떨어지더라도 코드의 가독성을 높이는 게 중요함
최적화(optimizing) 와 리팩토링(refactoring)
최적화 - 실행과정을 단축 메모리 사용최소 -> 실행속도 향상. 단점 : 가독성 구림 그래서 기능 추가 변경 삭제가 어렵다. 즉 유지보수에 시간이 많이든다. 비용 : 더 적은 자원(cpu, 메모리)을 소모한다.
이거는 사람을 더 투입하면 된다
리팩토링 - 코드를 더 잘게 분리한다 코드를 유지보수 하기 좋게 -> 코드의 가독성, 재사용성을 향상 시키는 것이 목표이다. 단점 : 실행 단계가 더 많아진다 -> 실행속도가 느려진다. 비용 : 더 적은 유지보수 기간이 든다. 이 단점은 메인보드 추가하면 됨;;(블레이드 시스템, 그리드 컴퓨팅)
지금은 리팩토링이 더 중요한 시대가 됐다.
코드가 정상적인 상황도 고려하고 정상적이지 않은 상황도 고려해야함
상황에 대한 메뉴 context menu
메인함수는 스태틱이 안붙은 애를 호출할 수 없음
스태틱이 안붙은 메서드는 스태틱이 안붙은 메서드를 호출 할 수 있다
void 메서드명() 메서드는 명령문 블록을 실행할 때 값을 받지않고 않고 결과도 리턴하지 않는다.
void 메서드명(변수선언, 변수선언2) 필요한 값 받는다. 그러나 결과 리턴 X
명령문블록을 실행할 때 값을 넘겨주지 않는다. 작업 결과는 리턴한다.
이런경우 앞에type 사용함
명령문 블록을 실행할 때 작업에 필요한 값을 받는다. 그리고 작업 결과를 반환한다.
아규먼트 - 내가 함수라면 내가 받는 값
값을 리턴하지 않는 메서드에 대해 변수를 선언하면 컴파일 오류!
리턴타입 void 의 경우 결과 리턴 없음
자바는 함수 호출할 때 아규먼트와 파라미터 개수가 같아야함
lv는 메서드가 호출될 때마다 변수를 만들었다가 끝나면 사라짐
리턴값이 없는데 변수로 받는다고 하면 안됨 이거는 어디서 알 수 있느냐 클래스 이름에서 void확인가능하다.
파라미터로 값을 안받는데 리턴 하면 이건 손들어! 돈내놔! 임ㄷㄷ 암것도 안주는데 뭘 달라하니까
리턴타입에 대해서 함수명 앞에 써주면 된다.
리턴값을 안받으면 걍 버려진다.
String에 format이라는 애가 있음 사용가능하다
자바에 가변 파라미터라고 있음 이게 자스의 아규먼트와 비스ㅅ함 즉 유사배열같은 느낌
가변 파라미터
[리턴타입] 메서드명(타입... 변수) {...}
=> 0 개 이상의 값을 받을 때 선언하는 방식.
=> 메서드 내부에서는 배열처럼 사용한다.
다음은 hello()를 호출할 때 String 값을 0개 이상 전달할 수 있다.
static void hello(String... names) {
static void hello(String... names) {
가변 파라미터에 배열을 줄 경우 그 배열을 그대로 받아서 사용한다 즉 복제를 하지않음
배열로 줄 때는 배열로 담아서 줘야한다람쥐
가변파라미터는 메서드당 하나만 사용가능
배열파라미터는 여러개 선언가능
배열파라미터는 중간에 다른 값 ok
가변파라미터는 맨끝에 와야햐한다.
(int a, String... names)
가변 파라미터 사용예시 printf 에서 사용
실행순서는 맨 안쪽부터 시작함
String[] arr = new String[5];
System.out.println(Arrays.toString(arr));
이렇게 하면 빈 공간 몇개 있는지 알 수 있음
메인 메서드와 로컬 변수랑은 다른 거임 어차피 로컬변수는 메서드가 실행이 끝나면 죽어버린다.