클래스 다루기
규칙
클래스를 소스파일 안에 만들 때는 규칙이 존재한다.
- 소스파일의 파일명 = 클래스명
- 만약 클래스를 여러 개 넣고 싶으면?
- 클래스 중 소스파일명과 같은 이름을 가진 것 앞에 public을 붙인다.
- 즉, 소스파일 당 public class는 하나만 있어야 한다.
- 파일명은 대소문자를 구분한다.
선언자
java
public class test {
}
class test {
}
위와 같이 클래스 앞에 붙어서 특정한 역할을 하는 이를 선언자라고 한다.
선언자에는 다음과 같은 종류가 있다.
- public, protected, abstract, etc…
- 뒤에 나올 추상클래스, 인터페이스 등등에서 쓰인다.
멤버변수 다루기
클래스 안에 변수를 선언해보자.
그런데, 변수에도 그 위치에 따라 종류가 있다.
java
class t_class {
static int number1;
int number2;
void method() {
int x;
}
}
- 클래스 변수 : 클래스 안, 메소드 밖에 static을 붙이고 선언
- 클래스가 메모리에 올라갈 때 초기화된다.
- 인스턴스 선언을 안 하고도 쓸 수 있다.
- 인스턴스 변수 : 클래스 안, 메소드 밖에 선언
- 인스턴스가 생성될 때 초기화 된다.
- 지역 변수 : 메소드 안에 선언
- 메소드 안에서만 쓰인다.
예시를 보자.
java
public class Solution {
public static void main(String[] args){
t_class c1 = new t_class();
t_class c2 = new t_class();
c1.x1 = 10;
System.out.println(c2.x1);
}
}
여기서 c2.number1 의 값은 10이다.
클래스 변수이기 때문에 c1.number1을 바꾸면 자동적으로 바뀌기 때문!
메소드 만들기
그냥 함수 만드는 것과 크게 다르지는 않다.
다만 몇 가지 용어만 살펴보고 가자.
parameter와 argument
java
class t_class {
int method(int y) { // parameter
y = 1;
return y;
}
}
public class Solution {
public static void main(String[] args){
t_class c1 = new t_class();
c1.method(5); // argument
}
}
둘 다 괄호 안에 들어가는 값인 것은 동일.
다만, 의미적인 차이가 존재한다.
- parameter(매개변수) ⇒ 클래스의 괄호 안에 들어가는 값.
- argument(전달인자) ⇒ 인스턴스의 괄호 안에 들어가는 값.
static 메소드
- 메소드도 static을 쓸 수 있다.
- 그러나 이 경우 클래스 변수만 활용할 수 있다.
java
class Counter {
static int count = 0; // 클래스 변수
int number = 3; // 인스턴스 변수
void Counter() {
count++;
System.out.println(count);
}
static int getCount() {
return count;
}
// getcount() : static 메소드
// count 외의 변수를 사용할 수 없다.