Java강의 - 메서드 정의 , 클래스와 인스턴스
[5] 메서드란?
*특정한 일을 수행 (동작/기능)
*메서드의 종류
- static(클래스)메서드 : 인스턴스 불필요
클래스의 이름으로 엑세스 가능
- instance메서드 : 인스턴스 필요
반드시 new키워드로 객체(인스턴스,오브젝트,참조변수)를
생성해서 액세스
*메서드의 구성
- [접근 제한자] [활용방법] 반환형 [메서드명] ( [매개변수, ....]) {
ex) pubilc static void Exercise ( String name , int age) {
*메서드의 접근 제한자
1.public : 모든 클래스에서 접근 가능
2.protected : 같은 패키지 내에서만 접근가능
다른 패키지의 경우 상속 관계일 경우는 가능
3.default : 같은 패키지 내에서만 가능
4.private : 자신의 클래스 내에서만 가능
*매서드의 활용방법
1.final : 오버라이딩 불가능한 매서드
2.static: 클래스 메서드(클래스 생성 시 만들어짐)
인스턴스는 필요없음
클래스의 이름으로 접근가능
동일 클래스 내의 메서드라도
static은 not static메서드에서 접근불가
(static은 static끼리만 접근가능)
3.abstract : 추상메서드(상속으로 하위 클래스에서 구현)
4.syschronized : 스레드의 동기화에 사용
Chapter 07. 클래스와 인스턴스
[1] 클래스
-건물을 지을 때 필요로 하는 설계도면 같은 것
-건물의 속성들을 정의한 설계도면으로 건물을 건축
[2] 객체
-설계도면에 의해 만들어진 건축물
*클래스와 객체를 이용하여 붕어빵 프로그램 만들기
- 클래스명 FishBread로 클래스 하나 생성하기(메인 메서드 없음)
- 붕어빵 클래스의 속성과 동작을 정의
- 붕어빵의 속성(거의다 변수로 만듬)
-> 팥 , 밀가루 , 색소 , 가스(불) , 틀 , 주전자 , 물 , 아주머니 , 계란 , 설탕 , MSG
int 팥 ,밀가루 , 주전자 , 물 , 아줌마 , 계란 , 설탕 ,MSG ;
String 색소 , 틀 ;
boolean 가스 ;
-붕어빵 동작(기능) ,(거의다 메서드로 만듬)
->반죽하다 , 반죽을 틀에 붓는다 ,
굽는다 , 뒤집는다 , 팥을 붓는다 , 틀에서 꺼낸다
불을 켠다 , 불을 끈다 , 완성된 붕어빵 팔기
-'가스 불 켜기' 메서드 작성
public void 불켜기(boolean 스위치){
가스 = 스위치 ;
System.out.println("불이 켜졌습니다.");
}
-'반죽하기' 메서드 작성
public int 반죽하기(int 밀가루 , int 계란 , int 팥 , int 물 ){
int 반죽 = 밀가루 + 계란 + 팥 + 물 ;
System.out.println("반죽완료!");
return 반죽 ;
}
-'붕어빵 굽기' 메서드 작성
public int 붕어빵굽기(int 반죽 , boolean 불 , int 개수 ){
int 붕어빵 = 개수 ;
return 붕어빵 ;
}
-'붕어빵 팔기' 메서드 작성
public int 붕어빵팔기(int 돈 ){
int 단가 = 500 ; (붕어빵 단가 = 500원)
int 붕어빵 = 돈 /단가 ;
return 붕어빵 ;
}
- FishBreadMain으로 클래스 하나 더 생성(메인 메서드 있음)
public static void main(String[] args) {
Ex01_FishBread myFish ; <- Ex01_FishBread myFish를 참조하는 객체 선언
myFish = new Ex01_FishBread() ; < - 객체 생성
- 불켜기 메서드 호출
myFish.불켜기(true) ;
- 반죽하기 메서드 호출
int 반죽 = myFish.반죽하기(500, 3, 100, 50) ;
- 붕어빵 10개 굽기 메서드 호출
int 붕어빵 = myFish.붕어빵굽기(반죽, true, 10) ;
붕어빵 = myFish.붕어빵팔기(10000);
System.out.println("만원으로 붕어빵" + 붕어빵 + "마리 판매 완료!");
}
[3] 생성자 ( Constructor )
-클래스의 객체가 생성될 때 객체의 초기화 과정을 기술하는 특수 메서드
-객체가 생성될때 딱 한번만 호출됨
-return 타입을 정의하면 안됨(void도 쓰면 안됨)
-클래스의 이름과 동일
-매개변수를 달리해서 여러 개 정의 가능
-클래스에 생성자를 아무것도 정의 하지 않은 경우
컴파일러에서 기본 생성자를 자동으로 추가해 줌
@MP3Player클래스와 MP3PlayerMain클래스를 생성
public class Ex01_MP3Player {
-color와 memory 속성을 지칭하는 인스턴스변수
private String Color ; <- 색상을 기억하는 color
int memory ; <-메모리 용량을 기억하는 memory
-price 속성을 저장하는 스태틱(클래스) 변수
static int price ; <-가격
-가격을 알려주는 getPrice 스태틱(클래스) 매서드
public static int getPrice(){
System.out.println("가격:" + price);
return price;
}
-기본 생성자 오버로딩
public Ex01_MP3Player(){
System.out.println("Ex01_MP3Player의 기본 생성자가 호출 되었습니다!");
}
-메모리의 용량과 색상은 매개변수로 받아서 초기화하는 생성자 오버로딩
public Ex01_MP3Player(int memory , String color){
this.memory = memory ;
this.Color = color ;
System.out.println(memory + "GB," + color + "색의 MP3객체가 생성되었습니다.");
}
@메인mp3플레이어 클래스 생성
public static void main(String[] args) {
-메모리 용량(1GB)과 색상(파랑)을 매개변수로 받는 생성자를 이용하여
mp33인스턴스 생성
Ex01_MP3Player mp33 = new Ex01_MP3Player( 1 , "파랑" );
}
[4] Static 예약어
-메서드나 멤버 변수(전역변수,글로벌 변수,멤버 필드)에 사용가능
-지역 변수나 클래스에는 사용 불가
-멤버 변수에 사용된 static 키워드
해당 클래스의 모든 객체가 공유하는 변수로 사용됨
-클래스가 로드 될 때 static 메모리 공간에 상주
==>클래스명.static변수명 또는
클래스명.static메서드명으로 접근 가능