- 백기선-JAVA STUDY/WEEK52020년 12월 19일 19시 33분 12초에 업로드 된 글입니다.작성자: jCurve728x90반응형
클래스
소프트웨어 개발시 객체들을 먼저 만들고 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP: Object Oriented Programming)이라고 한다.
클래스를 정의하는 방법
클래스는 객체를 정의해주는 틀로 객체의 속성과 기능을 하나로 묶어놓는다.
클래스는 필드 , 생성자 , 메소드로 구성이 되는데
필드(멤버 변수): 클래스 객체의 상태 속성을 나타내며, 여기서 초기화하는 것을 필드 초기화 또는 명시적 초기화라고 한다.
- 인스턴스 변수 : 클래스로 생성된 인스턴스가 갖는 변수로서 인스턴스가 생성될 때 만들어진다, 다른 인스턴스와 독립적인 값을 갖으며 heap 영역에 할당된다.
- 클래스 변수: static 키워드가 붙은 인스턴스 변수로 해당 클래스에서 파생된 인스턴스들은 이 변수를 공유할 수 있으며 public이 붙으면 전역 변수로서 사용이가능하다. (static영역에 할당 되며,gc의 관리를 받지 않음)
메서드: 메서드는 해당 객체의 동작을 나타낸다.
- 인스턴스 메서드: 인스턴스 변수와 연관된 작업을 하는 메서드이다. 인스턴스를 통해 호출할 수 있으므로 반드시 먼저 인스턴스를 생성해야 한다.
- 클래스 메서드: 정적 메서드로 ,인스턴스와 관계없는 메서드를 클래스 메서드로 정의하며 클래스.메서드로 바로 호출이 가능하다.
생성자: 객체를 생성할 때 사용되는 특별한 메서드를 말한다.
- 별도의 생성자를 작성하지 않을 경우 컴파일러에 의해 인자가 없는 생성자가 자동으로 생성된다.
- 생성 시점부터 필요한 상태 변수가 있을 시 매개 변수를 가지는 생성자를 선언하여 사용한다.
위에서부터 차례로 인스턴스 변수, 클래스 변수, 인스턴스 메서드, 클래스 메서드 , 생성자 이다.
초기화 블록을 사용하면 필드 생성 후에 초기화를 시킬 수 있다.
클래스를 설계할 때에는 외부에서 접근할 수 있는 멤버와 접근 할 수 없는 멤버로 구분해서
필드, 생성자, 메소드를 설계하는 것이 바람직한데 그러기 위해 사용하는것이 접근 제어자이다.
클래스는 public과 default 제어자 밖에 쓸 수 없다 .
static : 변수 , 메서드 객체가 아닌 클래스에 속한다.
final :
클래스 앞에 붙으면 해당 클래스는 상속될 수 없다.
변수 또는 메서드 앞에 붙으면 수정되거나 오버라이딩 될 수 없다.
abstract:
클래스 앞에 붙으면 추상 클래스가 되어 객체 생성이 불가능하며, 접근을 위해선 상속 받아야한다.
변수 앞에는 지정이 불가능하며, 메서드 앞에 붙는 경우는 오직 추상 클래스 내에서만 가능하고 , 추상 메서드는 선언부만 존재하고 구현부는 상속한 클래스 내 메서드에 의해 구현되어야 한다.
transient : 변수 또는 메서드가 포함된 객체를 직렬화할 때 해당 내용은 무시된다.
synchronized : 메서드는 한 번에 하나의 쓰레드에 의해서만 접근 가능하다.
volatile : 해당 변수의 조작에 cpu 캐시가 쓰이지 않고 항상 메인 메모리로부터 읽힌다.
싱글톤:
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우 , 단 하나만 생선된다고 해서 싱글톤이라고 한다.
싱글톤을 만드려면 클래스 외부에서 new 연산자를 호출할 수 없도록 막야한다. 따라서 생성자 앞에 private 접근 제한자를 붙여준다.
외부에서 필드값을 변경하지 못하도록 private 접근 제한자를 붙이고, 외부에서 호출할 수 있는 정적 메소드를 선언하여 정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다.
객체를 만드는 방법
클래스 정의 후에 객체를 만들 수 있다.
이때 객체를 생성 시키는 과정을 인스턴스화라고하고 생성된 객체를 인스턴스라고도 한다.
객체는 new 키워드를 통해 생성이 가능하다.
메서드 정의
메서드는 객체의 동작에 해당하는 중괄호 {} 블록을 말한다.
메서드는 필드를 읽고 수정하는 역할도 하지만 , 다른 객체를 생성해서 다양한 기능을 수행하기도 한다.
메소드 선언은
선언부 ( 리턴타입, 메소드 이름, 매개변수 선언) 과 실행 블록으로 구성된다.
(메서드 선언부를 메소드 시그니쳐라고도 하며 컴파일러는 시그니처를 보고 오버로딩을 구별한다. )
생성자 정의
위에서 말했듯 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 생성해준다.
근데, 생성자를 명시했다면 기본 생성자는 컴파일시에 생성되지 않는다.
따라서 매개변수를 받는 생성자를 선언했다면 인스턴스화할때 매개변수없이 인스턴스를 생성하려고하면 에러가 난다. (주의)
this 키워드
this 키워드는 인스턴스 자신을 가르킨다.
this를 쓰는 이유는 내가 만약 class에서 user라는 필드를 선언했는데 user의 값을 지정해주는 함수를 선언할때 마다 매개변수 이름을 다르게 지어주어야 하기 때문에 this의 사용은 매우 편리하다.
static method는 인스턴스 생성없이 사용 가능하므로 this의 사용이 불가능하다.
또한 this()는 해당 클래스의 생성자를 호출할 때 사용하며 사용시 메서드의 가장 윗줄에 위치해야한다. (생성자 체이닝);
반응형'JAVA' 카테고리의 다른 글
백기선 - JAVA STUDY/WEEK7 (0) 2021.01.15 백기선-JAVA/STUDY/WEEK6 (0) 2021.01.07 백기선-JAVA STUDY/WEEK4 (0) 2020.12.19 백기선-JAVA STUDY/WEEK3 (0) 2020.12.19 백기선-JAVA STUDY/WEEK2 (0) 2020.12.19 댓글