Day6 자바 문법 (2)

정채림·2026년 1월 8일

Class

Class의 구조

  • 속성
  • 생성자
  • 기능
class Person {
	//속성
	String name;
    //생성자
    //기본 생성자 Person ();
    //기능
    void callName() {
		System.out.println(name);
    }
    

getter/setter

  • getter: 클래스의 속성을 가져오는 기능
  • setter: 객체 외부에서 속성을 설정할 수 있게 하는 기능

JVM 메모리 영역

  • JVM 메모리 영역은 크게 method(static), stack, heap 으로 구분 됨

Method(Static)

  • 프로그램 실행 시 작성했던 모든 .java의 데이터가 이 영역에 저장됨
  • static 키워드로 선언된 변수와 method들이 여기 위치함.
  • 여기 저장된 데이터는 공용으로 사용 가능

Stack

  • Method가 호출될 때마다 Stack에 메모리가 할당 됨
  • 하나의 스택 프레임에 하나의 method의 지역변수가 저장됨
  • 후입선출(LIFO) 구조
  • method 실행 시 추가되고 종료 시 자동으로 제거됨

Heap

  • new 키워드로 생성된 개체가 저장되는 곳
  • stack 영역의 변수는 heap영역의 객체의 메모리 주소값을 참조함.

객체지향

캡슐화

  • 객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 것
  • 접근 제어자를 통해서 접근 범위를 제한할 수 있음
  • public(어디서든 접근가능)/private(같은 클래스내부에서만 접근가능) 등이 있음
  • private로 선언된 데이터는 getter와 setter 메서드 를 통해 접근할 수 있음.
  • 속성이 많아질 수록 관리가 어려워지므로 의미있는 단위로 묶어 관리하는 것이 좋음

상속

  • 클래스 간의 관계를 상위-하위의 개념으로 바라봄.
  • 상속은 재사용과 확장이 가능함.
  • extends 키워드를 사용해서 상속관계를 구현함.

추상클래스

  • 객체의 설계도 역할에 적합한 클래스
  • abstract 키워드로 선언함.
  • 부모객체에서 abstract로 선언한 메서드는 자식 메서드에서 강제로 구현해야함.
  • 추상 클래스는 객체를 생성할 수 없음.
  • 인터페이스와의 차이점 :
    1. 인스턴스 변수를 선언할 수 있음.
    2. 상속은 계층적 구조를 인터페이스는 펴준을 제공하는데 적합함.
    => 계층적 구조를 표현하면서 공통 속성과 기능을 재사용할 때 추상클래스를 사용하는 것이 적합함.

추상화

  • 불필요한 정보를 제거하고 본질적인 특징만 남기는 것
  • 추상화의 계층적 특징을 활용해 유지보수성을 높일 수 있음

다형성

  • 하나의 타입으로 여러객체를 다룰 수 있음

다운캐스팅 시 주의점

  • 컴파일러는 다운캐스팅이 "문법적"으로 올바른지만 확인하므로 다운캐스팅을 할 때 ClassCastException오류가 발생할 수 있음.
  • instanceof를 활용하여 타입을 확인 후 형변환을 하는 것이 안전함.

람다

  • 익명 클래스를 더 간결하게 표현하는 문법
  • 함수형 인터페이스를 통해서 구현하는 것을 권장
//함수형 인터페이스
@FunctionalInterface
public interface Calculator {
	int sum(int a, int b); // 하나의 추상 메서드만 선언
}
//ex)람다 표현식
Calculator calculator1 = (a,b) -> a + b;
//ex)익명 클래스
Calculator calculator1 = new Calculator() {
	@override
    public int sum(int a, int b){
    	return a + b;
    }
};

0개의 댓글