2020. 9. 3. 15:52ㆍWeb_Back-end/JAVA_선행
◎ 메소드(method)
- 메소스 : 입력을 받아서 처리결과를 반환하는 상자
- 각 메소드는 하나의 작업만 하도록 작성 (권장함)
- 각 메소드는 이름을 가지고 있다 (이름을 통해 호출//무명함수는 제외)
- 구조
반환형 메소드 이름(매개변수...){
메소드몸체
}
◎ 인수와 매개변수
- 인자 == 매개변수 == 파라미터 : 함수를 정의할 때 외부로부터 받아들이는 값
- 인수(argument) : 함수를 호출할 때 사용되는 값
◎ public static void main(String[] args)
① public
- 접근 지정자 : 제한없이 어디서든 사용 가능한 범위를 뜻함
- public 이외의 접근지정자 : private, protected
② static
- 정적 (이라는 뜻) // 메소드에 붙이면 정적메소드라고 부름
- static으로 선언하면 자바가 컴파일되는 시점에서 정의된다
- 객체를 생성하지 않아도 사용할 수 있다
③ void
- 메소드의 반환형 // void 는 반환값이 없거나 반환할 필요가 없다는 뜻
④ main
- 메소드의 이름
⑤ (String[] args)
- 메소드의 매개변수 // 이름이 args 인 String 타입의 배열이라는 뜻
★ static
- static 은 자바 프로그램이 실행 되기전에 static 변수나 static 함수를 메모리의 첫 단계로 올린 후 실행된다
- 프로그램이 실행되는 동안 사라지지 않는다
- main 함수에 static 을 사용하는 이유
- main() 함수는 프로그램의 시작점이기 때문에 실행과 동시에 실행되어야 한다
- main() 도 메소드이기 때문에 누군가가 호출해야 메모리에 올라간다
- 따라서, 프로그램 실행과 동시에 호출이 가능하도록 미리 메모리에 올리기 위해서 static을 사용한다
- 상수선언(static final)
- 변수의 용도와 의미를 고정시켜 프로그램이 실행되는 동안 바뀌지 않기 때문에 static으로 선언(관례)
◎ 메소드의 반환값
- 메소드는 자신을 호출한 코드에 값을 반환 할 수 있다
- 메소드는 return 문장을 사용해서 값을 반환한다
- 반환값이 없는 경우 : void 메소드이름 (값을 반환하면 오류 발생)
- 반환값이 있는 경우 : 반환형 메소드이름
- return 반환값; 형태로 값을 반환한다
- 이때, 반환형과 반환값의 자료형은 동일해야한다
◎ 메소드의 종료
- 메소드가 종료되는 조건
- } 를 만나면 종료
- return 문장이 실행되면 종료 // return문장은 값을 반환할 수도 있고, 반환값 없이 종료할 수도 있다
public static void main(String[] args) {
// TODO Auto-generated method stub
myMethod1();
int result = myMethod2(10,4);
System.out.println(result);
}
static void myMethod1() {
System.out.println("반환 값이 없는 void형 메소드");
}
static int myMethod2(int x, int y) {
return x+y;
}
< 예제 1 / Television 클래스에 void 메소드 추가해보기 >
- D+1~9 기존 방법 : main()에서 필드 값에 접근
- 권장 방법 : Television 이 가지고 있는 데이터는 Television 객체 안에서 출력
- 실습해보기 : Television 안에 print() 네소드 추가 (channel, volume 변수 출력하는 기능)
public class Television {
int channel;
int volume;
boolean onOff;
//print()안에서 필드를 사용할 때는 멤버연산자(.)를 사용하지 않는다
//(ex: tv.channel 이라고 안함)
void print() {
System.out.println("채널은: " + channel + "이고 볼륨은: " + volume + "이다.");
}
}
※ ptint() 안에서 필드 사용 시 멤버연산자 사용하지 않는 이유
- main() 에서 메소드를 호출할 때 호출한 객체의 변수라고 암묵적으로 간주된다
- tv.print(); 로 호출할 경우 tv 객체의 변수하고 (알아서) 간주하는 것
◎ toString() 함수
- 이클립스에 자동으로 만들 수 있는 함수
- alt + shift + s --> generate toString() 을 통해 생성
< 예제 2 / Television 클래스에 현재 채널을 반환하는 메소드 추가 >
int getChannel(){
return channel;
}
※ channel 의 값을 반환하는 메소드 추가
< 예제 3 / Television 클래스에 매개변수가 있는 메소드 추가 >
void setChannel(int ch){
channel = ch;
}
※ 채널을 설정하는 setChannel(int ch) 메소드를 추가하기
▲ get, set 은 관례적으로 사용하고 있다
종류 | get | set |
의미 | 값을 가져오는 함수 | 값을 설정하는 함수 |
생성방법 | alt + shift + s -> getter , setter 로 자동생성 | |
[source] -> [generate] 에서도 가능 | ||
getter setter가 필요한 이유 | 캡슐화의 정보은닉과 관련된 개념 |
< 예제 4 / 자동차 클래스 생성하기 >
- Car class 생성
- 필드 ( String color, int speed, int gear )
- 메소드 ( changeGear(), speedUp() // speed+10 , speedDown() // speed-10 )
- toString() 메소드 추가( 자동으로 추가해보기 )
//1. car 클래스 생성
public class Car{
//2. 필드 작성
String color;
int speed;
int gear;
//3. 메소드 선언
void changGear(int g){
gear = g;
}
void speedUp(){
speed+=10;
}
void speedDown(){
speed-=10;
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color = color;
//여기서 this 후설참조
//4. 자동으로 생성되는 toString() 메소드 추가
@Override
public String toString() {
return "Car [color=" + color + ", speed=" + speed + ", gear=" + gear + "]";
}
}
※ this.color = color; // color 는 필드 / color 는 매개변수
★ 자동으로 만들었기 때문에 필드와 매개변수 이름이 같게 나온다 따라서 this. 가 붙음
this.필드 = 매개변수;
보통 이렇게 같게 사용한다 (직접 만들때도)
◎ 메소드 오버로딩 (overloading)
- 동일한 이름의 메소드를 여러개 정의하는 것/ 단, 매개변수가 달라야한다
- 매개변수가 다르다 → 매개변수의 개수나 자료형을 다르게 정의하는 것을 의미
- ex) println()
- void println(int x)
- void println(String y)
- void println(double z)
< 간단한 예제 제곱 값을 구하는 메소드 square() 를 오버로딩으로 다양한 자료형 받기 >
public class Root {
public static void main(String[] args) {
System.out.println(square(3));
System.out.println(square(3.0));
}
static int square(int a) {
return a*a;
}
static double square(double a) {
return a*a;
}
}
//console
//9
//9.0
◎ String 클래스 사용
- 자바에서 문자열은 객체다 (=String 은 정수 int나 실수 double 같은 기초자료형이 아님)
- 원칙
- String s = new String("Hello");
- 하지만, 자주쓰는 객체라서 new 연산자를 생략해도 생성된다
- 문자열 안의 인덱스는 0부터 시작한다
- String 객체는 생성되면 내용 변경이 불가능하다 (immutable)
- String pizza = "맛있는 피자";
- pizza = "피자 먹을래!";
- 이같은 경우에, pizza가 수정된 것이 아니고 새로 할당 된 것이다. 따라서 "맛있는 피자"는 삭제된다 (GC 대상)
◎ Wrapper class
- 자바는 정수나 실수같은 기초 자료형을 제외하고, 모든 것이 객체로 되어있다
- 기초자료형을 객체로 포장하고 싶은 경우에 wrapper class를 사용한다
- 객체로 포장해야하는 경우
- 매개변수로 객체가 요구될 때
- 기본형 값이 아닌 객체에 저장해야 할 때
- 객체간의 비교가 필요할 때
- 모든 기초자료형에 대해 해당되는 클래스가 존재한다
기초자료형 | 래퍼클래스 |
int | Integar |
char | Charactor |
double | Double |
byte | Byte |
short | Short |
◎ Boxing 과 unBoxing // jdk 1.5 버전부터 auto 지원함 개념만 알아두기
- Boxing int → Integar
- 기초 자료형을 객체로 만드는 것
- unBoxing Integar → int
- 객체에서 기초자료형의 값을 얻는 것
- ex) 문자열을 기초자료형 값으로 변환 (parse~)
- parseInt(), parseDouble()
'Web_Back-end > JAVA_선행' 카테고리의 다른 글
DAY+12 클래스와 메소드 심화(2) (1) | 2020.09.11 |
---|---|
DAY+11 클래스와 메소드 심화(1)/ getter,setter,생성자 (0) | 2020.09.10 |
DAY+9 클래스,객체,메소드 (1) | 2020.09.01 |
DAY+8 배열(ragged,jagged array & ArrayList) (1) | 2020.09.01 |
DAY+7 배열(단어 기본정리)/for-each, 복사, 난수, 2차원배열 (1) | 2020.08.30 |