티스토리 뷰
Chapter 6. 클래스에 대하여
▶ 학습 목표
: 클래스가 무엇인지 이해하고 클래스변수 인스턴스변수의 차이에 대해 설명할 수 있다.
6-2. 클래스와 객체
- 클래스
: 객체를 만들기위한 설계도이다.
클래스의 자식으로는 변수와 함수를 가진다. (변수와 함수를 가지고 객체를 생성)
*함수는 '함수()'와 같이 표현
- 인스턴스
: 클래스를 통해 객체를 만드는 것이다.(new를 사용)
*같은 이름을 가졌지만 값은 다르다. (주소값)
- 클래스의 사용
package chapter6;
public class 인사직원
{
public static void main(String[] args)
{
/*클래스 변수는
* 1.클래스이름.변수명 접근가능
* 2.참조변수.변수명 접근가능
*/
int p = 생산직원.price;//파란색 전역변수
생산직원 직원1 = new 생산직원();
생산직원 직원2 = new 생산직원();
for(int i=0; i<100; i++)
{
String 제품=직원1.제품생산();
System.out.println(제품); //실행결과 "과자"
System.out.println("직원1");
System.out.println(직원1.count);
}
for(int i=0; i<50; i++)
{
String 제품 = 직원2.제품생산();
System.out.println(제품);
System.out.println("직원2");
System.out.println(직원2.count);
}
}
}
package chapter6;
public class 생산직원
{
static int price=100;
int count=0;
public String 제품생산()
{
count++;
return "과자";
}
}
생산직원 클래스를 인사직원 클래스에서 참조하여 인스턴스 생성 후 연산.
클래스를 작성한다고해서 클래스를 사용할 수 있는것이 아니다.
실제 클래스를 사용하고자하면 new를 사용하여 클래스의 객체를 생성해야한다.
new를 하는 이유는 변수와 함수를 활용하기 위해서이다.
→ 애초에 클래스는 변수와 함수를 가지고 있는 것이기 때문에 new를 하여 다른 클래스는 참조하면 그 다른 클래스의 변수와 함수를 사용하는 것
클래스명.변수명; //클래스의 객체를 참조할 수 있는 첨조변수 선언
변수명 = new 클래스명(); //클래스의 객체를 생성하고 객체의 주소를 참조변수에 저장
클래스명 변수명 = new 클래스명(); //한번에 선언하는 경우
참조변수로 인스턴스 접근 방법
변수에 접근할 경우 : 참조변수.변수명
메서드를 실행시킬 경우 : 참조변수.메서드명();
new에 의해 인스턴스가 메모리의 빈 공간에 생성 > 대입연산자에 의해 저장된 메모리의 주소 값이 참조변수에 저장
*call by value
: 일반 변수 데이터를 저장하고 값을 참조
*call by reference
: 참조 변수 주소를 저장하여 주소를 참조
package chapter6;
class Class_practice
{
boolean powerOn;
String color;
int wheel;
int speed;
boolean wiperOn; //변수 선언
void power() {powerOn = !powerOn;}
void speedUp() {speed++;}
void speedDown() {speed--;}
void wiper() {wiperOn = !wiperOn;} //함수
}
public class car
{
public static void main(String[] args) {
Class_practice mycar = new Class_practice();
//인스턴스생성 mycar라는 변수에 class_practice의 주소담음 call by reference
System.out.println("시동 처음 초기화 : " +mycar.powerOn); //mycar.powerOn은 mycar의
System.out.println("차의 색상 초기화 : " +mycar.color);
System.out.println("바퀴의 수 초기화 : " +mycar.wheel);
System.out.println("속력 초기화 : " +mycar.speed);
System.out.println("와이퍼 작동 초기화 : " +mycar.wiperOn);
mycar.power(); //서브함수 호출해서 power()동작 powerOn이 false에서 true가 됨
System.out.println("시동 메서드 동작 : " +mycar.powerOn);
mycar.power(); //서브함수 호출해서 power()동작 powerOn이 true에서 false가 됨
System.out.println("시동 메서드 다시 동작 : " +mycar.powerOn);
mycar.color = "black";
//mycar에 class_practice주소가 담겨 있으므로 class_pracitce 함수의 color변수의 값을 바꿔준다.
System.out.println("현재 차의 색상 : " +mycar.color);
}
}
6-3. 인스턴스변수와 클래스변수
- 인스턴스 변수
: 객체마다 각 각 가지는 변수, 각기 다른 값을 가질 수 있다.
인스턴스 변수 : n개 생성(여러개 생성 가능)
인스턴스 변수 생성 방법 : new
생성 방법 : 수동(직접 입력해주어야한다.)
class cars
{
int speed; //인스턴스 변수 선언
} //기존 방식과 동일함
- 클래스 변수
: 인스턴스 변수와 다르게 모두 공통된 값을 공유해서 가지는 변수이다.
모두 공통된 값을 공유하기 때문에 하나의 변수만 가질 수 있다.
클래스 변수 : 1개 생성
클래스 변수 생성 방법 : static
생성 방법 : 자동(앞에 static이 오면 자동으로 이미 생성된 것을 뜻한다.)
class cars
{
static int wheel; //클래스 선언(앞에 static)
}
package chapter6;
class cars{
static int wheel=4; //클래스변수
int speed; //인스턴스 변수
}
public class Class_practice_3 {
public static void main(String[] args) {
System.out.println(cars.wheel); //클래스 변수 접근 가능
//System.out.println(cars.speed); 인스턴스 변수는 생성하지 않으면 접근할 수 없다.
cars mycar1 = new cars(); //인스턴스 생성
System.out.println(cars.wheel);
System.out.println(mycar1.speed);
//인스턴스 생성 후 클래스변수, 인스턴스 변수 둘 다 접근 가능
cars mycar2=new cars();
System.out.println("<변경 전>");
System.out.println("mycar1.speed : "+mycar1.speed);
System.out.println("mycar2.wheel : "+mycar2.speed);
System.out.println("mycar1.wheel : "+mycar1.wheel);
System.out.println("mycar2.wheel : "+mycar2.wheel);
mycar2.speed=100;
mycar2.wheel=5;
System.out.println("<변경 후>");
System.out.println("mycar1.speed : "+mycar1.speed);
//인스턴스변수의 경우 각각 값을 가지기때문에 car1의 값은 안바뀐다.
//speed는 인스턴스 변수!
System.out.println("mycar2.wheel : "+mycar2.speed);
System.out.println("mycar1.wheel : "+mycar1.wheel);
//mycar2를 바꿨지만 클래스변수이기 때문에 mycar1도 값이 바뀐다.
System.out.println("mycar2.wheel : "+mycar2.wheel);
}
}
6-4. 메서드
: 함수이다.
파라미터 값을 받아 처리하고 결과 값(return)을 출력하거나 반환한다.
반환타입 메서드명(타입 변수명, 타입 변수명, ..)
{
//메서드 내부 동작
return 값;
}
반환 값을 받지않을 경우 void를 사용한다.
그 외는 반환값이 있어야만 한다.
'코딩 > JAVA' 카테고리의 다른 글
[2주차 3일] 변수 (0) | 2023.10.18 |
---|---|
계산기 프로그램(메서드) (0) | 2023.10.17 |
배열 값 입력 받아 출력 (1) | 2023.10.17 |
[2주차 1일] Chapter 5. 배열 (1) | 2023.10.16 |
학점 계산기(Scanner, if) (0) | 2023.10.16 |
- Total
- Today
- Yesterday