객체(Object)
란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성(객체의 데이타)을 가지고 있고 다른 것과 식별 가능한 것
객체는 속성(=필드(field))
과 동작(=메소드(method))
으로 구성
프로그래밍은 결국 데이터를 다루는 일이라 생각되며, 객체 지향 프로그래밍에서도 해당
객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작. 객체들 사이의 상호작용 수단은 메소드
이며, 객체가 다른 객체의 기능을 이용하는 것이 바로 메소드 호출
김영한님 인프런 강의스프링 핵심 원리 - 기본편
강의 초반에 이런 말씀을 하심
스프링 뭐 별거 없습니다. 결국 스프링이란 것도 자바의 객체지향의 다형성을 극대화 시켜서 사용하는거라고 보면 됩니다.
그 후로 공부 할 때 이 부분을 항상 의식하면서 공부하고 있으며, 다형성은 다음과 같은 특징이 있음
객체 지향 프로그래밍에선 메모리에서 사용하고 싶은 객체가 있다면 우선 설계도로 해당 객체를 만드는 작업이 필요하며, 자바에서는 설계도가 바로 클래스(Class)
클래스에는 객체를 생성하기 위한 필드
와 메소드
가 정의되어 있음
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)
라고 함
첫 자를 대문자
로 작성new
객체
는 메모리 힙(heap) 영억에 생성Study s1 = new Study();
public class ClassName {
// 필드
int fieldName;
// 생성자
ClassName() { ··· }
// 메소드
void methodName() { ··· }
}
객체의 데이터가 저장되는 곳
초기값이 지정되지 않은 필드들은 객체 생성 시 자동으로 기본 초기값으로 설정(변수와 헷갈리지 말것)
선언 형태는 변수(variable)과 비슷하지만,
필드를 변수라고 부르진 않음
- 필드: 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재
- 변수: 생성자와 메소드 내에서만 사용 되며 생성자와 메소드가 실행 종료되면 자동 소멸
private
으로 설정할 경우 싱글톤(Singleton)으로 설정되며 new
연산자로 생성static
키워드를 추가public class ClassName {
// 정적 필드
static 타입 필드 [= 초기값];
// 정적 메소드
static 리턴 타입 메소드( 매개변수 선언, ··· ) { ··· }
}
static double pi = 3.141592;
static {
···
}
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야하고 공유토록 하기위해 싱글톤(Singleton)
객체를 사용함
new
연산자로 생성자를 private
접근 제한자를 붙여주면 외부에서 getInstance()
를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴public class ClassName {
//정적 필드
private static ClassName singleton = new ClassName();
// 생성자
private ClassName {}
// 정적 메소드
static ClassName getInstance() {
return singleton;
}
}
ClassName sgt1 = ClassName.getInstance();
ClassName sgt2 = ClassName.getInstance();