재밌고 어려운 IT를 이해해보자~!
클래스 본문
자바는 객체지향언어이다!
class 객체지향의 기본 객체지향 프로그램 object oriented program! (OOP)
프로그램의 객체는 속성이 있고 기능이 있는것들 학생 -> 번호 이름 학년 성별 / 기능 -> 공부하다 등교하다 등등 ..
클래스란 객체를 표현한 것이며 객체를 코드화 해서 클래스로 표현
컴퓨터는 input이 있어야 output이 생긴다. 객체를 컴퓨터에게 알려줘야한다.
체계는 클래스를 크게 3가지로나눈다.
1. 실행용 main
2. 라이브러리 (Math, System, Array) 기능, 도움들
3.data (사람,사물) 정보들
class 명 앞글자는 대문자로 표현하며
class 구성의 3요소 필드(맴버변수or 변수), 메서드(기능), 생성자 (클래스 생성에 필수 ) 이다.
예를보자
Car.java ------------------------------
public class Car {
//초기값안주면 0이나 null이 들어간다.
int year; //연도 //-> 인스턴스 맴버 (객체를 선언해야 혹은 인스턴스를 만들어야 사용할 수 있다)
String carName; //자동차 이름
//와 같이 변수를 선언하고 이떄 이 변수는 인스턴스라 부른다.
public void go() {
System.out.println(carName + "출발합니다"); //인스턴스 메서드
}
//와 같이 기능을 선언한다
}
다음은 메인클래스
Carmain.java----------------------------
public class Carmain {
public static void main(String[] args) {
Car car = new Car(); // 선언
//class 를 가지고 객체를 생성해야 사용할 수 있으며
// 이것을 클래스의 객체화/인스턴스 화 라고 부른다.
//클래스 클래스를담을변수 = 클래스 생성 구문 -> 생성자
//new Car(); 공간은 메모리에 기억됨 (저장)
//메모리의 위치를 인스턴스 car가 받아 그주소를 통해서 변수와 메서드를 꺼낼 수 있다.
//맴버변수 접근시 . 사용
//배열은 [] 를통해 각요소에 접근 클래스는 .을 이용 해 접근
car.year = 2020;
car.carName = "소나타";
car.go();
}
}
정적 키워드 static
일반적으로는 객체화 해야 메모리에 등록된다.
하지만 static은 다르다 시작할때 등록이 된다.
시작 -> 클래스 -> 컴파일 -> 해석 - 저장
컴파일 해석 저장을할때 static은 미리 메모리에 올라간다.
메모리 영역에 직접 접근 안되는곳에 클래스나 메서드가 저장.
객체화 한 후에 클래스,인스턴스는 접근가능한 메모리에 저장
static은 만들어질때 바로 접근가능한 메모리에 저장 객체화를 안해도 된다.
static선언 예시
//MathCal.java
public class MathCal {
static double pi =3.14;
static void print(double result) {
System.out.println("넓이는 " +result);
}
}
//MathMain.java
import java.util.Scanner;
public class MathMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("반지름 입력해라 :");
int ban = scan.nextInt();
double Area = ban*ban * MathCal.pi;
MathCal.print(Area);
}
}
클래스의 인스턴스, 메서드에 static을 선언함으로써
클래스명과 .을 이용해 메인클래스에서 인스턴스와 메서드를 바로 사용할 수 있다.
MathCal.pi
MathCal.print(Area);
만약 클래스의 인스턴스와 메서드에 static을 선언하지 않았다면
클래스를 객체화/인스턴스화 시켜야한다.
Mathcal mathcal = New Mathcal();
생성한 객체or인스턴스 mathcal을 이용해 호출한다.
mathcal.pi
matchcal.print(Area);
static키워드를 사용하면 인스턴스로도 출력 가능하지만 클래스로 호출하는게 맞다.
ex)
mathcal.pi 도되지만
MathCal.pi로 해야한다.
static의 주의사항
static은 메모리위치에 항상존재 메모리 점유 조심해야한다. 공유용으로도 사용 프로그램이 종료 될때까지 안사라짐
static은 클래스를 해석할 때 메모리에 등재
그리고 프로그램이 종료 될 떄 해제
프고르매이 진행 중일 때는 메모리에 고정
메모리 점유!
자주사용하는 변수, 자주사용하는 메서드에 사용한다.
Getter, Setter
getter,setter은 보통 인스턴스가 private으로 보호되어있을때 사용한다.
//Bank.java
package exam05;
public class Bank {
private int money;
//입금
public void setMoney(int money) {
if (money<0) {
System.out.println("잘못 입력되었습니다.!");
return; // 일찍 종료 else대신 사용할수있다 실행문 종료
}
this.money = money ; // this는 class자기자신을 의미
}
//돈 출력
public int getMoney() {
return money;
}
}
//BankMain.java
package exam05;
public class BankMain {
public static void main(String[] args) {
Bank b= new Bank();
//b.setMoney(-500);
//b.setMoney(1000);
//b.money =1000; //int Money가 privat이 아니면 그냥 b.money로 참조 가능
//private 최상의 접근자 내부에서만 사용 가능 외부 접근 불가 데이터보호
//그럴떄 setter getter 사용
//set + 변수명
//get + 변수명
//private로 접근이 제한된 변수와 같이 사용
b.setMoney(1000);
System.out.println("현금:" + b.getMoney());
}
}