1.메서드(Method)
메서드란?
수학의 함수와 비슷하며 호출을 통해 메서드 내부의 함수에 작성된 연산을 진행하여 사용한다.
메서드 표현식
[접근제한자][예약어] [반환형] 메소드명([매개변수]) {
//기능정의
}
메서드 접근제한자
public : 어디서든 접근이 가능하다
protected : 자손 클래스에서도 접근이 가능하다
(default) : 같은 패키지에서 접근이 가능하다
private : 같은 클래스에서만 접근이 가능하다
메서드 예약어
static : static 영역에 할당하여 객체 생성 없이 사용하며 싱글톤 패턴이라고도 한다
ex) Math.random();
싱글톤 패턴 : 객체의 인스턴스를 단 하나만 생성하는 패턴
final : 종단의 의미로 상속 시 오버라이딩이 불가능하다
abstract : 미완성 메서드를 의미하며 상속하여 오버라이딩으로 완성시켜 사용한다
synchronized : 동기화 처리하며 공유자원에 하나의 스레드만 접근 가능하다
동기 : 순서대로 실행 비동기 : 동시에 모두 실행
스레드 : 프로그램이 동시에 여러 작업을 할 수 있도록 돕는 기능(일꾼)
**스레드가 많을 경우 동기화를 통해 오류를 줄인다
static final : static과 final의 의미를 동시에 지닌다
메서드 반환형
void : 반환형이 없음을 의미하며 반환값이 없을 경우 반드시 작성한다
기본 자료형 : 연산 수행 후 반환값이 기본 자료형 일 경우 사용한다
ex) int, String, double, char, float, boolean
배열 : 연산 수행 후 반환 값이 배열인 경우 배열의 주소값이 반환된다
클래스 : 연산 수행후 반환 값이 해당 클래스 타입의 객체일 경우 해당 객체의 주소값이 반환
메서드의 매개변수
() : 매개변수가 없는것을 의미한다
기본자료형 : 기본형 매개변수 사용 시 값을 복사하여 전달하며 매개변수 값이 변경되도 본래의 값은 변경되지 않는다
배열, 클래스 : 배열과 클래스 등 참조형을 매개변수로 전달 시 주소값을 전달한다
가변인자 : 매개변수의 개수를 유동적으로 설정하는 방법으로 가장 마지막에 설정한다
ex) 자료형…변수명
**매개변수의 수에는 제한이 없다
**Stack의 특징으로 LIFO(Last Input First Out == 마지막에 들어온게 먼저 나간다)를 따른다.
return : 호출한 메서드로 return값을 가지고 되돌아간다…..호출된 메서드 자리에 return값을 넣는다는 뜻이다
자료형 void의 경우 return; 이 생략되어 존재한다
오늘은 메서드에 관한 예제에 대한 풀이를 통한 복습을 하며 강의를 마쳤다. 예제는 다음과 같다.
링크텍스트
1)Snack 클래스
package com.kh.practice.snack.model.vo;
public class Snack {
private String kind;
private String name;
private String flavor;
private int numOf;
private int price;
public Snack() {
}
public Snack(String kind, String name, String flavor, int numOf, int price) {
super();
this.kind = kind;
this.name = name;
this.flavor = flavor;
this.numOf = numOf;
this.price = price;
}
public String information() {
return kind+"("+name+" - "+
flavor+") "+numOf+"개 "+price+"원";
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFlavor() {
return flavor;
}
public void setFlavor(String flavor) {
this.flavor = flavor;
}
public int getNumOf() {
return numOf;
}
public void setNumOf(int numOf) {
this.numOf = numOf;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
2)SnackController 클래스
package com.kh.practice.snack.controller;
import com.kh.practice.snack.model.vo.Snack;
public class SnackController {
private Snack s = new Snack();
public SnackController() {
}
public String saveData(String kind, String name, String flavor, int numOf, int price) {
s.setKind(kind);
s.setName(name);
s.setFlavor(flavor);
s.setNumOf(numOf);
s.setPrice(price);
return "저장 완료되었습니다."+
"\n저장된 정도를 확인하시겠습니까?(y/n) : ";
}
public String confirmData() {
return s.information();
}
}
3) SnackMenu 클래스
package com.kh.practice.snack.view;
import java.util.Scanner;
import com.kh.practice.snack.controller.SnackController;
public class SnackMenu {
private Scanner sc = new Scanner(System.in);
private SnackController scr= new SnackController();
public void menu() {
System.out.println("스낵류를 입력하세요.");
System.out.print("종류 : ");
String kind = sc.next();
System.out.print("이름 : ");
String name = sc.next();
System.out.print("맛 : ");
String flavor = sc.next();
System.out.print("개수 : ");
int numOf = sc.nextInt();
System.out.print("가격 : ");
int price = sc.nextInt();
System.out.print(scr.saveData(kind, name, flavor, numOf, price));
String result = sc.next();
if(result.equals("y") || result.equals("Y")) {
System.out.println(scr.confirmData());
}else {
}
}
}