public class Car {
private String color;
private String model;
// 기본 생성자
public Car() {
this.color = "Red";
this.model = "Toyota";
}
// 매개변수를 받는 생성자
public Car(String color, String model) {
this.color = color;
this.model = model;
}
// 기타 메서드
}
기본형(primitive types): int
, double
, boolean
등과 같은 기본 데이터 타입을 리턴할 수 있다.
참조형(reference types): 클래스, 인터페이스, 배열 등과 같은 참조형 데이터 타입을 리턴할 수 있다.
void: 메서드가 아무런 값을 반환하지 않을 경우 void
를 리턴 타입으로 지정한다. 이는 메서드가 작업을 완료한 후 어떠한 값도 반환하지 않음을 의미한다.
public int add(int a, int b) {
return a + b;
}
public void greet() {
System.out.println("Hello!");
}
예제 1
// package는 관련 있는 class들을 하나로 묶는 논리적인 단위이고
// 물리적으로는 폴더로 표현된다.
// 거의 예외없이 package는 사용을 한다.
// 하나의 자바 파일에 public이 붙은 class는
// 두 개 이상 존재할 수 없다. (하나만 있어야 한다.)
// 만약, public class가 존재하면 파일명은 반드시
// public class 이름으로 설정해야 한다.
package test;
public class HelloWorld {
// field들
int age;
// constructor들
// constructor는 이름이 클래스 이름과 같다.
// 모양은 method와 유사하다. (리턴 타입 존재 X)
// constructor는 instance의 초기화를 담당하는 일을 주로 한다.
public HelloWorld() {
}
// 만약 생성자를 직접적으로 명시하지 않으면
// javac compiler가 소스 코드를 bytecode로 컴파일 할 때
// default constructor를 자동으로 삽입한다.
// default constructor는 인자도 없고 하는 일도 없는 생성자다.
// default constructor는 반드시 작성하는 버릇을 들이자.
// 그러고 오버로딩해서 여러 생성자를 만들던가 한다.
// method들
public void sayHello() {
}
// 프로그램의 entry point 진입점
public static void main(String args[]) {
System.out.println("안녕하세요~");
// 인스턴스 만들기
// 메모리 공간의 heap 영역에 대부분 인스턴스가 만들어진다.
// java는 강타입 언어기 때문에 무조건 데이터 타입을 명시해 주어야 한다.
// a는 reference variable이라고 부른다.
// Heap 영역의 instance의 시작 주소를 가지고 있기 때문에 그렇다.
HelloWorld a = new HelloWorld();
}
}
예제 2
package test;
public class MyTest {
// static block
// 클래스가 로드될 때 가장 먼저 수행된다.
static {
}
// 필드들
// a라는 변수에 100을 넣을 것이다.
// 넣는 것에서 끝나는 것이 아니라, 클래스로부터 인스턴스를 만들어야 함.
// 인스턴스가 있어야 사용할 수 있는 변수
// 즉, instance variable이라고도 한다.
// instance variable은 메모리 heap 영역에 만들어진다.
public int a = 100;
private static int b = 200; // java에는 전역 변수는 따로 없다.
// class variable
// static이 붙으면 Method Area에 올라간다.
// heap에 instance가 없어도 사용할 수 있다.
// instance에는 b가 저기 있다고 알려주는 참조 값이 있다.
private int c = 300;
// 생성자들
public MyTest() {
}
MyTest(int k) {
}
// 메소드들
public static void main(String args[]) {
// 위에 있는 a라고 되어 있는 field를 사용하려면
// 당연히 instance가 존재해야 한다.
MyTest obj = new MyTest();
// obj 라는 시작 주소값이 들어있는 참조 변수 = 객체
// obj 라는 reference variable을 이용해서 Heap 영역에
// 생성된 instance를 사용할 수 있다.
// reference variable을 이용해서 instance를 사용할 때
// 우리가 이용하는 연산자가 있다.
// dot operator(.)
System.out.println("a의 값은 : " + obj.a);
// import java.lang.*; 을 원래 추가해야하지만 javac 컴파일러가 자동으로 추가해준다.
// 지역 변수는 메소드가 호출될 때 만들어지고
// stack 영역에 공간이 잡히고
// 메소드가 끝나면 pop되면서 사라지는 변수
int k = 200; // 지역 변수(local variable)
// 지역 변수는 stack 영역에 만들어진다.
}
}