객체 중심의 프로그래밍으로 연관되는 속성과 기능을 묶어서 부품화 시킨다.(캡슐화)
객체는 주변에 존재하는 모든 사물(자동차, 건물, 옷 등), 생명체(사람, 고양이 등) 하나 하나가 다 객체라고 할 수 있다.
클래스에 정의된 내용대로 메모리에 할당된 결과물(Object)이다.
절차지향 : 작업의 흐름에 따라 코드를 작성
객체지향 : 객체의 관계에 따라 코드를 작성
외부에서 접근 가능한 멤버와 불가능한 멤버를 구분하는 용도로 사용하며 클래스의 캡슐화를 지원한다.
캡슐화
추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법이며 데이터의 접근 제한을 원칙으로 한다.
캡슐화 원칙
접근제한자의 공개 범위
public > protected > default > private 순으로 좁아지며 protected는 상속관계가 아니면 잘 사용하지 않는다.
객체를 생성하기 위해 속성과 기능을 정의한 설계도
속성(상태) = 변수, 기능(행위) = 메소드로 구성한다.
사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의한다.
클래스명.java로 생성한다. 반드시 클래스명과 대/소문자까지 일치해야 된다.
💡 [접근제한자] [클래스 식별자] class 클래스이름접근제한자
클래스의 접근에 제한을 두는 예약어로 public 과 default (package private) 두 가지가 사용된다.
클래스 식별자 (Identifier)
클래스의 종류를 지정하는 예약어로 final, abstract 두 가지가 사용될 수 있다.
일반적으로 소스파일(xxx.java) 당 하나의 클래스를 선언한다. 두 개 이상의 클래스 선언도 가능하며 파일 이름과 동일한 클래스명에만 public 사용 가능하다.
컴파일 시 각 클래스마다 따로 .class 파일이 생성되고 가급적이면 하나의 클래스만 선언하는 것이 좋다.
// ex) Aaa.java
public class Aaa {
}
class Abc {
}
객체의 데이터가 저장되는 곳이며 변수와 비슷하지만 생성자나 메소드 외부에 선언되어 클래스 전체에서 사용된다.
// 필드 예시
public class Member {
public int tmp1;
protected int tmp2;
int tmp3; // 접근제한자 생략 시 default
private int tmp4; // 캡슐화 원칙으로 private 사용
// tmp1 = 3; 필드에서 변수 사용은 안된다! (메소드 안에서 사용 가능)
}
public class Var1 {
private int num1; // 인스턴스 멤버 변수
}
public class Var2 {
private static int num2; // static(정적) 멤버변수 (클래스 변수)
// Var2 클래스에 의해 생성된 모든 객체가 num2 필드를 공유하게 된다.
}
public class Var3 {
public void method3() {
int num3 = 10; // method3 메소드 안의 지역 변수임
}
}
public class VariableExam {
// 필드를 선언할 때, 선언과 동시에 초기값 설정
public final int NUM = 100;
// 생성자에서 초기화할 때
private final int FINAL_VAR; // 필드에서 선언
public Point() { // 생성자에서 초기화
FINAL_VAR = 200;
}
}
public class VariableExam {
public static final int NUM = 100; // 반드시 선언과 동시에 초기값 설정
}
논리형 : false
정수형 : 0
실수형 : 0.0
문자형 : (공백)
문자열형(참조형) : null
public class VariableExam {
public boolean var1 = true; // 논리형
public int var2 = 10; // 정수형
public double var3 = 3.5; // 실수형
public char var4 = 'A'; // 문자형
public String var5 = "Hello"; // 문자열형
}
// 인스턴스, static 초기화 블록
public class VariableExam {
public boolean var1 = true; // 논리형
public static int var2 = 10; // 정수형
public double var3 = 3.5; // 실수형
public char var4 = 'A'; // 문자형
public String var5 = "Hello"; // 문자열형
// static 초기화
static {
var2 = 20;
}
// 인스턴스 초기화
{
var1 = false;
var3 = 5.6;
var4 = 'B';
var5 = "안녕하세요";
}
}
public class VariableExam {
public boolean var1 = true; // 논리형
public static int var2 = 10; // 정수형
public double var3 = 3.5; // 실수형
public char var4 = 'A'; // 문자형
public String var5 = "Hello"; // 문자열형
public Variable() {
var1 = true;
var2 = 30;
var3 = 10.5;
var4 = 'C';
var5 = "반갑습니다";
}
}