230724 TIL Chapter 9. OOP ( Object Oriented Programming )

최규연·2023년 7월 24일
0

TIL

목록 보기
9/57

오늘은 OOP ( Object Oriented Programming ) 를 배웠다.

객체 지향 언어

객체란 독립적으로 각각 구분해서 인식 할 수 있는 것으로
객체 지향에는 4대 특징이 있다.

  • 추상화 (Abstraction)
  • 캡슐화 (Encapsulation)
  • 상속 (Inheritance)
  • 다형성 (Polymorphism)

현실에서의 객체란 자신의 속성(값, data)과 기능(동작,행동)이 다른 것들 과 구분되어 식별 가능한 것

자바에서의 객체란 클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것

객체 지향 언어란 현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며, 발생하는 모든 사건들은 객체간의 상호작용이다.
이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.

추상화 (abstraction)

프로그램에서 필요한 공통점을 추출하고 불필요한 부분을 제거하는 과정을 추상화라고 한다.

캡슐화 (Encapsulation)

캡슐화 원칙

  • 클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.
  • 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 멤버 메소드는 클래스 내부에 작성한다.
  • 멤버 메소드는 클래스 밖에서 접근할 수 있도록 public으로 설정한다.

캡슐화를 하면 직접 접근을 못하기 때문에 클래스 내부에서 간접 접근 방법을 제공하는 기능을 작성 == (Getter , Setter)


클래스 ( Class )

클래스를 들어가기 전 자바에서의 각 변수의 특징을 다시 한번 정리해보면

클래스 변수

  1. static으로 선언된 멤버변수, 프로그램 실행시 정적 메모리 영역에 자동으로 할당된다.
  2. 프로그램 종료시 자동으로 소멸되는 변수이다.

클래스 선언

[접근제한자][예약어] 자료형 변수명; ----- 속성값 설정
[접근제한자] 생성자명(){}
[접근제한자] 반환형 메소드명(매개변수){
		// 기능 정의                 --- 기능정의 설정
}

클래스 접근 제한자


필드 ( Field )

필드(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;  }
    }

생성자 ( Constructor )

생성자 : 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;
	}
}

기본 생성자
작성하지 않은 경우, 클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성

매개변수 생성자
매개변수 생성자 작성 시 컴파일러가 기본 생성자를 자동으로 생성해주지 않음 -> 즉, 매개변수 생성자 사용시 기본 생성자도 신경 써줘야함.

0개의 댓글