오늘은 OOP ( Object Oriented Programming ) 를 배웠다.
객체란 독립적으로 각각 구분해서 인식 할 수 있는 것으로
객체 지향에는 4대 특징이 있다.
현실에서의 객체란 자신의 속성(값, data)과 기능(동작,행동)이 다른 것들 과 구분되어 식별 가능한 것
자바에서의 객체란 클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것
객체 지향 언어란 현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며, 발생하는 모든 사건들은 객체간의 상호작용이다.
이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.
프로그램에서 필요한 공통점을 추출하고 불필요한 부분을 제거하는 과정을 추상화라고 한다.
캡슐화 원칙
캡슐화를 하면 직접 접근을 못하기 때문에 클래스 내부에서 간접 접근 방법을 제공하는 기능을 작성 == (Getter , Setter)
클래스를 들어가기 전 자바에서의 각 변수의 특징을 다시 한번 정리해보면
[접근제한자][예약어] 자료형 변수명; ----- 속성값 설정
[접근제한자] 생성자명(){}
[접근제한자] 반환형 메소드명(매개변수){
// 기능 정의 --- 기능정의 설정
}
필드(field) : 객체의 속성을 작성하는 클래스 내부 영역
== 멤버 변수 : 메서드 밖에 작정된 변수
인스턴스 변수 : 필드에 작성되는 일반 변수
클래스 변수( == static 변수 ) : 필드에 static 예약어가 작성된 변수
[접근제한자] [예약어] class 클래스명 {
[접근제한자] [예약어] 자료형 변수명 [= 초기값];
}
필드 예시
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 (default)
private int temp4; //캡슐화 원칙으로 private 사용
}
static : 같은 타입의 여러 객체가 공유할 목적으로 필드에 사용되며 프로그램 시작시 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용
ex)
public class Academy {
private static int temp1;
}
final : 하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
ex)
public class Academy {
private final int TEMP1 = 100; // final 키워드가 붙은 필드명은
// 모두 대문자로 표기
private int temp4;
}
클래스 초기화 블럭
인스턴스 블럭 ( { } ) : 인스턴스 변수를 초기화 시키는 블럭으로 객체 생성시 마다 초기화
static(클래스) 블럭 ( static{ } ) : static 필드를 초기화 시키는 블럭으로 프로그램 시작 시 한 번만 초기화
[접근제한자] [예약어] class 클래스명 {
[접근제한자] static 자료형 필드1 = 10;
[접근제한자] 자료형 필드2 = 20 // 명시적 초기화;
static{ 필드1 = 30; }
{ 필드2 = 40; }
}
생성자 : new 연산자를 통해서 객체를 생성할 때 생성된 객체의 필드 값 초기화 + 지정된 기능을 수행하는 역할 / 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록한다.
생성자 규칙
[접근제한자] [예약어] class 클래스명 {
[접근제한자] 클래스명() { }
[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; }
}
ex)
public class Academy {
private int studentNo;
private String name;
public Academy() {} // 기본 생성자
public Academy(int studentNo, String name) { //매개변수 있는 생성자
this.studentNo = studentNo;
this.name = name;
}
}
기본 생성자
작성하지 않은 경우, 클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성
매개변수 생성자
매개변수 생성자 작성 시 컴파일러가 기본 생성자를 자동으로 생성해주지 않음 -> 즉, 매개변수 생성자 사용시 기본 생성자도 신경 써줘야함.