package class_;
public class Animal {
//멤버변수 선언
String name; //이름
int age; // 나이
// 메서드 정의
// 짖다 (cry())
동물 (Animal)에 해당하는 Animal 클래스 정의
1. 분석
- 속성 : 이름(name, 문자열), 나이(age, 정수)
- 기능 : 짖다(cry())
2.설계 - 클래스 정의
< 클래스 정의 기본 문법 >
[접근제한자] class 클래스명 { 접근제한자는 꼭 필요한 것은 아니다
멤버변수
메서드
}
Main ( ) 메서드
main() 메서드는 자바 프로그램의 시작점이다!
=> main() 메서드에서부터 객체를 생성하고 사용할 수 있다!
단, main() 메서드에서만 가능한 것은 아니고
main() 메서드가 호출하는 다른 메서드에서도 사용 가능
정의한 클래스는 설계도에 해당하므로 실제 사용을 하기 위해서는
반드시 실체(=객체)를 생성해야한다!
=> 클래스를 사용하여 메모리에 생성된 객체(실체)를 만들게 되고,
이를 인스턴스(Instance)라고 함
< 클래스에 대한 인스턴스 생성 기본 문법 >
클래스 변수명 = new 클래스명();
Animal 클래스의 인스턴스 생성
1. Animal 클래스 타입 참조변수 선언
public static void main(String[] args) {
Animal ani;
STACK HEAP
a ani 0x10 ani2 ax20 |
animal name age animal name age |
2. Animal 클래스 인스턴스 생성 및 주소값 저장
ani = new Animal();
위의 두 문장을 한 문장으로 결합
Animal ani = new Animal();
Animal 인스턴스에 접근하여 멤버변수 사용 및 메서드 호출
=> 인스턴스 접근을 위해서는 반드시 인스턴스 주소가 필요하며,
인스턴스 주소를 담고 있는 참조 변수(ani)를 통해 접근이 가능함
Animal 인스턴스의 멤버변수 name 과 age 에 값 저장
컴파일 에러 발생!!!! 존재하지 않는 변수, 사용 불가
반드시 참조변수명. 멤버변수명 형태로 접근해야 함!
name = "멍멍이";
ani 인스턴스 멤버변수 name에 멍멍이를 저장함
ani.name = "멍멍이";.
System.out.println("이름 : " + ani.name);
ani.age = 3;
System.out.println("나이 : " + ani.age);
출력 값 = > 이름 : 멍멍이
나이 : 3
Animal 클래스의 두번째 인스턴스(ani2) 생성
=> 멤버 변수(name, age 같은 것) 초기화 - 이름 : 냐옹이, 나이 : 2
Animal ani2 = new Animal();
ani.name = "냐옹이";
System.out.println("이름 : " + ani.name);
ani.age = 8;
System.out.println("나이 : " + ani.age);
HEAP 이라는 영역에
ani가 찾아 갈 수 있는 name = 멍멍이 age = 3 주소값 1
ani2가 찾아 갈 수 있는 name = 냐옹이 age = 8 주소값 2
두개의 인스턴스가 만들어 진 것.
----------------------------------------------------------------
위의 두 인스턴스(ani, ani2) 구조
----------------------------------------------------------------
new
Animal 클래스 => 인스턴스1(ani) 인스턴스2(ani2)
이름(name) "멍멍이" "냐옹이"
나이(age) 3 8
----------------------------------------------------------------
Car 클래스의 인스턴스(car) 생성 및 멤버변수 초기화 후 출력
제조사 : 현대
모델명 : 그랜져
배기량 : 3000
=> Heap 공간에 생성된 인스턴스 주소가 참조변수 car에 저장
Car car = new Car();
car.company = "현대";
car.modelName = "그랜져";
car.cc = 3000;
System.out.println("제조사 : " + car.company);
System.out.println("모델명 : " + car.modelName);
System.out.println("배기량 : " + car.cc);
출력 값 => 제조사 : 현대
모델명 : 그랜져
배기량 : 3000
Class 정의
class 안에 또 다른 class 만들기
} main() 메서드 끝
} Ex 클래스 끝
Ex 클래스 끝에, 또 다른 class를 넣을 수 있다.
하나의 java 파일 내에 여러 개의 클래스를 정의할 수 있다!
단, 파일명과 동일한 이름의 클래스 외에는 public 키워드를 붙일 수 없다.
학생(Student) 클래스 정의
속성 : 이름 (name, 문자열), 번호(id, 정수), 과정명(className, 문자열)
class Student{
//멤버변수 선언
String name;
int id;
String className;
ex ) Student 클래스 인스턴스 생성
- 이름 : "홍길동", 번호 : 1, 과정명 : "핀테크 금융서비스 자바 개발자"
참조변수 : s1
- 이름 : 본인이름, 번호 2 과정명 : 핀테크 금융서비스 자바 개발자
참조변수 :s2
Student s1 = new Student();
s1.name = "홍길동";
s1.id = 1;
s1.className = "핀테크 금융서비스 자바 개발자";
System.out.println("이름 : " + s1.name);
System.out.println("번호 : " + s1.id);
System.out.println("과정명 : " + s1.className );
Student s2 = new Student();
s2.name = "정지원";
s2.id = 2;
s2.className = "핀테크 금융서비스 자바개발자";
System.out.println("이름 : " + s2.name);
System.out.println("번호 : " + s2.id);
System.out.println("과정명 : " + s2.className);
인스턴스와 인스턴스의 멤버 변수는 서로 독립적이다.
animal class, student class 의 멤버 변수는 달라서, 서로 영향을 안준다.
METHOD 메서드
메서드(Method)
-동작(작업)의 최소 단위 (= 작업을 수행하는 코드들의 모음)
ex) "밥먹다" 의 기능을 메서드로 표현(밥을 떠서 입에 넣고 씹기 등)
-메서드는 반드시 호출되어야만 실행 될 수 있음.
-메서드 호출 시 메서드에 전달하는 값을 전달인자(Argument)라고 하며,
전달 인자를 전달 받아 저장하는 변수를 매개변수(Parameter)라고 함.
Parameter -> 있을 수도 있고, 없을 수도 있음.
메서드 정의 기본 문법
[접근제한자] 리턴타입 메서드명 ([매개변수선언...]){
메서드 호출 시 수행할 코드들...
[return [리턴값];]
}
메서드 호출 기본 문법
< 메서드 형태 4가지 >
1. 파라미터도 없고, 리턴값도 없는 메서드
2. 파라미터도 없고, 리턴값만 있는 메서드
3. 파라미터만 있고, 리턴값은 없는 메서드
4. 파라미터도 있고, 리턴값도 있는 메서드
메서드 호출 방법
=> 호출할 메서드의 이름을 사용하여 메서드를 호출하며,
전달할 데이터가 있을 경우 소괄도()안에 데이터를 명시
(만약, 데이터가 여러 개일 경우 콤마(,)로 구분
메서드 정의
1.파라미터(전달할 값)도 없고, 리턴값(돌려받을 값)도 없는 메서드 호출
System.out.println("동생아! 불좀 꺼라");
sister_1();
} //main () 메서드 끝
public static void sister_1() {
}
} // Ex() 클래스 끝
1. 파라미터도 없고 리턴값도 없는 메서드 정의
=> 메서드 파라미터가 없으므로 선언부 소괄호 ()안에 아무것도 명시하지 않음
=> 리턴값이 없으므로 리턴타입 부분에 특수한 데이터타입인 void 타입을 명시
(void = 리턴값이 없다는 의미)
Int
public static void sister_1() {
}
먹는다(사과);
public static int 먹는다(음식) {
개수 = 3;
return 개수;
}
} // Ex() 클래스 끝
String
public static void sister_1() {
}
먹는다(사과);
public static String 먹는다(음식) {
return "여러개";
}
} // Ex() 클래스 끝
Void
(void = 리턴값이 없다는 의미)
public static void sister_1() {
}
먹는다();
public static void 먹는다() {
}
멤버 변수 선언 & 메서드 정의
public void cry () {
System.out.println("동물 울음 소리!");
ani.cry();
=> 동물 울음 소리!
public void speedUp() {
System.out.println("자동차 속력 증가!");
}
public void speedDown() {
System.out.println("자동차 속력 감소!");
}
void가 있으니 리턴값은 없다.
car.speedUp();
car.speedDown();
=> 위의 구문들이 출력 됨
메서드 정의
2. 파라미터는 없고, 리턴값만 있는 메서드 호출
2.파라미터는 없고, 리턴값만 있는 메서드 호출 정의
=> 메서드 파라미터가 없으므로 선언부 소괄호 () 안에 아무것도 명시하지 않음
=> 리턴값이 있으므로 리턴할 데이터와 일치하는 데이터타입을
리턴타입 부분에 명시(문자열을 리턴하려면 String 타입을 명시)
System.out.println("동생아! 불좀 꺼라");
sister_1(); //메서드를 호출 , 정의 된 곳으로 이동
System.out.println("동생이 불을 끄고 갔다!");
} //main () 메서드 끝
public static void sister_1() {
//sister_1() 메서드가 호출됐을 때 수행할 작업들을 기술
System.out.println("동생 : 오빠가 불을 끄라고 해서 불을 껐다!");
} //메서드가 종료되면 메서드를 호출한 곳으로 되돌아감
} // Ex() 클래스 끝
출력 값 =>
동생아! 불좀 꺼라
동생 : 오빠가 불을 끄라고 해서 불을 껐다!
동생이 불을 끄고 갔다!
System.out.println("동생아! 물좀 떠와라");
public static STring sister_2() {
System.out.println("동생 : 오빠가 물을 떠오라고 시켜서 물을 떠다 줬다.");
에러남!
String을 쓰고 싶으면, return 값 을 써야 에러가 나지 않는다.
public static String sister_2() {
System.out.println("동생 : 오빠가 물을 떠오라고 시켜서 물을 떠다 줬다.");
return "물";
System.out.println("동생아! 물좀 떠와라");
sister_2();
=> 동생 : 오빠가 물을 떠오라고 시켜서 물을 떠다 줬다. 값이 출력된다.
리턴 값이 있는 메서드 호출 후, 변수에 그 값(물)을 저장할 수 있다. ((변수에 저장하거나, 출력문에 사용 가능))
만약, 아무 동작도 없을 경우 메서드 호출 후 리턴값은 버려진다.
System.out.println("동생아! 물좀 떠와라");
String result = sister_2();
return "물"; 을 메서드를 빠져나올 때 들고 감. result 라는 곳에 저장 시킨다.
String 타입 변수 result에 저장(String result = "물" 과 동일함)
return
함수를 빠져나갈 때 가지고 갈 값
System.out.println(result);
System.out.println("동생이 가져다 준 것 " + result);
=> 물
주의! 리턴값이 없는 메서드를 출력문에서 호출하거나 변수에 대입 불가!
오류 발생! Type mismatch : cannot convert from void to String
String result = sister_1();
리턴값을 변수에 저장하지 않고 직접 사용도 가능
System.out.println("동생이 가져다 준 것 : " + sister_2());
'BackEnd > Java' 카테고리의 다른 글
0831 JAVA - method 호출 (0) | 2022.08.31 |
---|---|
0826 JSP - JavaBean, 회원가입 로그인 페이지 만들기 (0) | 2022.08.26 |
0818 JAVA - WHILE 문 ~ DO WHILE 문 (0) | 2022.08.18 |
8/17 JAVA - 주사위 굴리기, 타이머 만들기 (0) | 2022.08.17 |
8/10 JAVA - FOR 반복문 , 누적 (0) | 2022.08.10 |