get/set : 정보은닉
둘중 하나만 제공해서 필요한 것만 사용하게 하거나
멤버변수에서 값을 받을 때 원하는 형식을 받기 위해 사용
변수를 핸들링 하기 위해 사용
지역변수 : 사용하고 사라짐
맴버변수 : 인스턴스에서 사용되고 사라짐, int, char, double
초기화하지 않으면 맴버변수는 0,null로 초기화 됨
참조변수 : String, 객체
클래스변수 : 데이터 메모리에 올라가서 프로그램 종료시 사라짐
static : 로딩될때 데이터 메모리에 올라가서 프로그램 종료시 사라짐
공통적으로 사용하거나 고정된 값을 메모리놓고 쓸 때 사용
메모리 구조 : 데이터 메모리 - 스택 메모리 - 힙 메모리
데이터 메모리 : static 메모리, 프로그램 종료 시 사라짐
스택 메모리 : 함수 실행시 올라갔다가 사용이 끝나면 사라짐
힙 매모리 : 참조변수들의 값을 저장, 스텍 메모리에서는 주소를 가지고 힙 메모리 참조변수들의
싱글톤 : 하나의 인스턴스를 static 으로 만들어서 공통적으로 사용
private static Singleton instance = new Singleton();
private Singleton(){};
public static Singleton getInstance(){
return instance;
}
1. 객체를 private static으로 만들고
2. 기본 생성자를 private로 만들고
3. 인스턴스 반환 메소드를 public static 으로 만들어서 return 해준다
this : 자기 자신을 호출
this.height : 자기 변수 호출
this() : 자기 메소드 호출
객체/인스턴스 차이
객체는 선언만 한것 : Car car;
인스턴스는 생성해서 메모리에 올라간 것 : Car car = new Car();
생성자(Construct)
생성자를 생성하지 않으면 디폴트 생성자가 만들어짐
오버라이딩
메소드 제정의
오버로딩
같은 이름의 메소드를 입력값을 다르게 해서 사용하는 것만
public, default, private, protected
public : 같은 프로젝트에서 사용
default : 같은 페키지 내에서 사용
private : 해당 클래스에서만 사용
protected : 상속받은 클래스에서만 사용
break,continue
break : 밑에 무시하고 해당 제어문 나감
continue : 밑에 무시하고 다음 실행
배열[] : 물리적 논리적 주소가 같음
링크드리스트 : 필요할 떄 마다 생성 가능, 물리적으로 떨어져잇음
길이를 처음에 선언해야한다
객체 배열을 만들면 배열만 만들어지기 떄문에 안에서 사용하는 객체는 따로 인스턴스를 만들어야 한다
ex) Student[] student = new Student[2];
student[0] = new Student();
student[1] = new Student();
ArrayList
배열을 편하게 하기 위해서 제공하는 페키지
사용하는 객체는 따로 생성을 해서 list에 넣어줘야 한다
ArrayList<Student> studentList = ArrayList<Student>();
Student student = new Student();
studentList.add(student);
상속
하위클래스에서 상위클래스를 사용 할 수 있음
다중 상속 되지 않음
상속 받는 클래스는 extends 사용
오버라이딩가능
기본 생성자가 없으면 생성자 오버라이딩 필요하다
Car car = new Avante();
car.drive();
상속받은 객채로 생성가능함. 오버라이딩 했으면 car가 아닌 avante에서 메소드를 불러온다
다형성
하나의 코드가 여러 자료형으로 구현되어 실행되는 것
객체지향언어의 특징
모든 객체에 대해서 생성하는것이 아닌 상위 클래스로 만들어서 사용가능
if문을 많이 줄일 수 있다
다운캐스팅
Car car = new Avante();
(Avante)car.drive(); 형변환
Avante 의 메소드와 변수 사용가능
istanceof
인스턴스객체인지 아닌지 알고 싶을때 사용
안정적으로 하기 위해 체크해주는 것이 좋다
추상클래스
abstract
무조건 구현해야 함
인스턴스화 불가
public abstract void drive(); 중괄호 없이 생성
템플릿 메서드
프레임워크처럼 큰 틀이 만들어져 있음
상속받은 클래스에서 못쓰게 하려면 final 사용가능
final
final은 상속되지 않고 오버라이딩 불가
변경될 수 없는 상수임
인터페이스
명세와 같음
인터페이스에서 선언한 변수는 상수가 되고 메서드는 추상메서드가 된다
인스턴스화 할 수 없음
내부가 어떻게 구현됫는지 알 필요가 없이 인터페이스만 보고 사용가능
implements 구현
인터페이스를 구현하는데 사용 다중상속은 안되지만 다중구현은 된다
'개발 > Java' 카테고리의 다른 글
Spring ResponseEntity Stream 처리 관련 오류 (2) | 2025.07.25 |
---|---|
레거시 스케줄러에 배치 처리 방식 적용하기 (1) | 2025.03.24 |
대용량 파일 관리 스케줄러 개발 정리 (0) | 2025.03.04 |