티스토리 뷰
반응형
1. 메소드의 개념
- 자바에서 특정 작업을 수행하기 위한 명령문의 집합을 메소드라고 부른다.
- 다른 프로그래밍 언어에는 함수와 같은 것을 메소드라고 볼 수 있다.
메소드 사용 목적
- 중복되는 코드의 반복을 피할 수 있기 때문이다.
- 모듈화를 통해 코드의 가독성이 좋아진다.
- 기능 변경이 필요할때 유지보수를 쉽게 할 수 있다.
메소드 정의
접근제어자 반환타입 메소드이름(입력자료형1 매개변수1, 입력자료형2 매개변수2, ...) { // 선언부
// 구현부
return 리턴값;
}
- 접근제어자는 해당 메소드에 접근할 수 있는 범위를 나타냅니다.
- 반환타입(return type)은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 나타냅니다.
리턴값이 없으면 void로 표기한다. - 메소드이름은 메소드 호출을 위함 이름입니다.
- 매개변수목록(parameters)은 메소드 호출 시 전달되는 자료형과 매개변수를 나타냅니다.
- 구현부에는 메소드 고유 기능을 수행하는 명령문을 표현합니다.
리턴값이 없는 메소드도 존재한다.
메소드 호출
1. 객체참조변수이름.메소드이름(); // 매개변수가 없는 메소드의 호출
2. 객체참조변수이름.메소드이름(인수1, 인수2, ...); // 매개변수가 있는 메소드의 호출
메소드 예제
public class Ex01 {
int sum(int a, int b) { // a, b 는 매개변수
return a+b;
}
public static void main(String[] args) {
Ex01 ex01 = new Ex01();
int num = ex01.sum(2, 5); // 2, 5는 인수
System.out.println(num); // 7 출력
}
}
2. 생성자(Constructor)
- 생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다.
생성자의 선언
자바에서 클래스 생성자를 선언하는 방법은 다음과 같습니다.
1. 클래스이름(){ ... } // 매개변수가 없는 생성자 선언
2. 클래스이름(인수1, 인수2, ...){ ... } // 매개변수가 있는 생성자 선언
생성자의 특징
- 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야 한다.
public class Circle{
public Circle(){....} // 생성자
}
- 생성자는 여러개 작성(오버로딩)할 수 있다.
public class Circle{
public Circle(){....} // 매개변수 없는 생성자
public Circle(int a, String b){....} //2개의 매개변수를 가진 생성자
}
- 생성자는 new를 통해 객체를 생성할 때 한번만 호출된다.
Circle pizza = new Circle(10, "피자"); // 생성자 Circle(int a, String b) 호출
Circle donut = new Circle(); // 생성자 Circle() 호출
- 생성자는 어떤 값도 리턴하지 않기 때문에 리턴 타입을 지정할 수 없다.
public void Circle(){....} // 오류
기본 생성자(default constructor)
클래스이름(){}
- 기본생성자는 매개변수와 실행코드가 없어 아무일도 하지 않고 단순 리턴하는 생성자이다.
- 디폴트 생성자라고도 부른다
- 객체가 생성 될 때 컴파일러는 사용자의 눈에 보이지 않게 기본 생성자를 자동으로 생성한다.
- 클래스에 생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자를 삽입해주지 않는다.
생성자 예제
public class Circle {
int radius;
void set(int r){
radius = r;
}
double getArea(){
return 3.14*radius*radius;
}
public static void main(String [] args){
Circle pizza = new Circle();
pizza.set(3);
}
}
3. this와 this()
this
- 자바에서 this는 객체 자신을 가리키는 레퍼런스이다.
- 즉, 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다.
public class Circle{
int radius;
public Circle(int radius){
this.radius = radius;
}
public int getRadus(){
return radius;
}
}
this의 필요성
- 매개변수의 이름을 멤버 변수와 같은 이름으로 붙이고자 할때 this를 사용한다.
public int getRadus(){
return radius;
}
- 메소드가 객체 자신의 레퍼런스를 리턴해야하는 겨우에 this를 리턴하면 된다.
public Circle getMe(){
return this;
}
this() 메소드
- this()는 같은 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용한다.
public class Book{
public String title;
public String author;
void show() {
System.out.println(title + author);
}
public Book() {
this("");
System.out.println("생성자 호출됨");
}
public Book(String title){
this(title, "작자미상");
}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
public static void main(String[] args){
Book emptyBook = new Book();
emptyBook.show();
Book loveStory = new Book("신데렐라");
loveStory.show();
}
}
this() 사용시 주의할 점
- this()는 반드시 생성자에서만 호출할 수 있다.
- this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용한다.
- this()는 반드시 생성자의 첫번째 문장이어야 한다.
4. 메소드 오버로딩(method overloading)
- 자바에서 한 클래스 내에 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성하는 것을 메소드 오버로딩이라고 한다.
- 메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나이다.
메소드 오버로딩의 조건
- 메소드 이름이 동일해야 한다.
- 매개변수의 개수나 타입이 서로 달라야 한다.
public class overLoading {
public int sum(int a, int b) {
return a + b;
}
public int sum(int a, int b, int c) {
return a + b + c;
}
public int sum(int a, int b, int c) { // 메소드와 매개변수의 개수, 타입이 모두 같기 때문에 오버로딩 실패
return a + b + c;
}
}
오버로딩된 메소드 호출
public class overLoading {
public int sum(int a, int b) {
return a + b;
}
public int sum(int a, int b, int c) {
return a + b + c;
}
public static void main(String args[]) {
overLoading sample = new overLoading();
System.out.println(sample.sum(2, 5));
System.out.println(sample.sum(2, 5, 10));
}
}
반응형
'JAVA' 카테고리의 다른 글
[Java] 상속(Inheritance) - (2)super, super(), 오버라이딩 (0) | 2022.03.30 |
---|---|
[Java] 상속(Inheritance) - (1)상속 개념, 상속 특징 (0) | 2022.03.24 |
[Java] 클래스(class)의 개념 (1) | 2022.03.22 |
[Java] 객체지향 프로그래밍(OOP) (0) | 2022.03.21 |
[Java] 리스트 (List, ArrayList) (0) | 2022.03.15 |
댓글
반응형
공지사항