객체 (Object) : 모든 실재(實在)하는 어떤 대상
객체지향 프로그래밍 (Object Oriented Programming, OOP)
객체지향 프로그래밍 장점
클래스 (Class) : 객체를 만들기 위한 설계도, 틀
인스턴스 (Instance) : 클래스를 통해 생성된 해당 객체. (해당 데이터)
인스턴스화 : 클래스로부터 객레를 만드는 과정
객체 (Object) : 모든 인스턴스를 포괄하는 의미.
클래스 (Class) 구성요소
객체의 생성방법
class CarTest {
public static void main(String[] args) {
//클래스명 참조변수명; // 인스턴스 참조 위한 참조변수 선언
//참조변수명 = new 생성자(); // 인스턴스 생성 후, 객체주소 참조
Car bus = new Car();
Car taxi = new Car();
Car tractor; // 선언
tractor = new Car(); // 할당 및 초기화
}
}
스택영역 (Stack Area)
클래스 영역 (Class Area)
힙 메모리 영역 (Heap Area)
필드 (Field) : 클래스에 포함된 변수
class Example { // => 클래스 영역
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수 (static 변수. 공유 변수)
void method() { // => 메서드 영역
int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
}
}
메서드 (Method) : 특정 작업을 수행하는 일련의 명령문 집합
자바제어자 반환타입 메서드명(매개변수) { // 메서드 시그니처
메서드 내용 // 메서드바디
}
public class Example {
// 매개변수 O 반환값 O
public static int add(int x, int y) { //메서드 시그니처
int result = x + y; //메서드 바디
return result;
// 반환값이 있을땐 return문이 있어야한다
}
// 매개변수 X 반환값 X
public static void print() {
System.out.println("매개변수없어요");
System.out.println("반환값없어요");
}
// 매개변수 O 반환값 X
public static void printadd(int x, int y) {
System.out.println("반환값은 없지만 계산할수있어요");
System.out.println("x + y = " + (x + y));
}
// 매개변수 X 반환값 O
public static int justReturn() {
return 10;
}
}
메서드 호출
.
을 통해 호출Example example = new Example();
System.out.println(example.add(5,10));
System.out.println(example.justReturn());
> 출력
> 15
> 10
메서드 오버로딩 (Method Overloading)
public class Overloading {
public static void main(String[] args) {
Shape s = new Shape(); // 객체 생성
s.area(); // 메서드 호출
s.area(5);
s.area(10,10);
s.area(6.0, 12.0);
}
}
class Shape {
public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개
System.out.println("넓이");
}
public void area(int r) {
System.out.println("원 넓이 = " + 3.14 * r * r);
}
public void area(int w, int l) {
System.out.println("직사각형 넓이 = " + w * l);
}
public void area(double b, double h) {
System.out.println("삼각형 넓이 = " + 0.5 * b * h);
}
}
> 출력
> 넓이
> 원 넓이 = 78.5
> 직사각형 넓이 = 100
> 삼각형 넓이 = 36.0
생성자 (Constructor) : 인스턴스 변수들을 초기화하는데에 사용되는 특수한 메서드.
new
키워드public class ConstructorExample {
public static void main(String[] args) {
Constructor con1 = new Constructor();
Constructor con2 = new Constructor("Hello World);
Constructor con3 = new Constructor(5, 10);
}
}
class Constructor {
Constructor() { // (1) 생성자 오버로딩
System.out.println("1번 생성자");
}
Constructor(String str) {
System.out.println("2번 생성자");
}
Constructor(int a, int b) {
System.out.println("3번 생성자");
}
}
기본 생성자(Default Constructor) : 매개변수가 없는 생성자
this.변수
키워드
class Coffees{
static String coffeeName1 = "Ice Americano"; // class 변수
String coffeeName2; // 인스턴스 변수
int price;
Coffees() {} // 기본 생성자
Coffees(String coffeeName2, int price) {
this.coffeeName2 = coffeeName2;
this.price = price;
}
}
this()
메서드
public class Test {
public static void main(String[] args) {
Example ex1 = new Example();
Example ex2 = new Example(5);
}
}
class Example {
public Example() {
System.out.println("Example의 기본 생성자 호출");
};
public Example(int x) {
this();
System.out.println("Example의 두번째 기본 생성자 호출");
}
}
> 출력
> Example의 기본 생성자 호출
> Example의 기본 생성자 호출
> Example의 두번째 생성자 호출
내부 클래스 (Inner Class) : 클래스 내에 선언된 클래스
종류 | 선언 위치 | 사용 가능 변수 |
---|---|---|
인스턴스 내부 클래스 (Instance Inner Class) | 멤버 내부 클래스 | 외부 인스턴스 변수, 외부 전역 변수 |
정적 내부 클래스 (Static Inner Class) | 멤버 내부 클래스 | 외부 전역 변수 |
지역 내부 클래스 (Local Inner Class) | 외부 클래스의 메서드 혹은 초기화 블럭 안 | 외부 인스턴스 변수, 외부 전역 변수 |
익명 내부 클래스 (Anonymous Inner Class) | 클래스 선언 + 객체 생성을 같이하는 일회용 익명 클래스 | 외부 인스턴스 변수, 외부 전역 변수 |