Live-Study

4 주차 - 클래스 ( Class )

WOOKTAE 2021. 4. 27. 01:52

클래스와 객체

클래스는 객체지향 프로그래밍 ( Objec - oriented programming ) 에서 객체를 생성하기 위해 상태 ( State ) 와 행동 ( Behavior ) 을 정의하는 일종의 설계도이다. 여기서 객체란 어플리케이션의 기능을 구현하기 위해 서로 협력하는 개별적인 실체로써 물리적일 수도 있고 개념적일 수도 있다.

객체지향의 4대 특성 ( 추상화, 캡슐화, 상속, 다형성 ) 을 통해 프로그램 개발 및 유지보수를 더욱 쉽고 빠르게 할 수 있을 것이다.

 

클래스 선언

클래스 이름은 다른 클래스와 식별할 수 있어야해서 다음과  같은 자바 식별자 규칙에 따라 만들어야 한다.

1)  클래스명은 자바 메소드명과 다르게 첫글자를 대문자로 표현한다. 여러 단어가 혼합되면 CamelCase 를 따른다.

 

2) 일반적으로 자바 파일하나에 클래스 하나를 선언하지만 여러개를 선언할 수 있다.

 

 

클래스 정의 

객체의 상태와 행동이 정의된 하나의 클래스로 비슷한 구조를 갖죄 상태는 서로 다른 여러 객체를 만들 수 있다.

 

  • 필드 -객체의 데이터가 저장되는 곳,변수라 부르지 않는다.변수는 생성자와 메서드내에서만 사용되고 생성자와 메서드가 종료되면같이 사라지기 때문이다.필드는 객체가 생성되고 소멸될 때까지 객체와 함께한다.
    • 인스턴스 변수 - 이름에서 알 수 있듯이 인스턴스가 갖는 변수이다. 그렇기에 인스턴스를 생성할 때 만들어진다. 서로 독립적인 값을 갖으므로 Heap 영역에 할당되는 가비지컬렉터에 의해 관리된다.
    • 클래스 변수 - 정적을 의미하는 Static 키워드가 인스턴스 변수 앞에 붙으면 클래스 변수이다. 해당 클래스에서 파생된 모든 인스턴스는 이 변수를 공유한다. 그렇기 때문에 Heap 영역이 아닌 static 영역에 할당되고 가비지 컬렉터의 관리를 받지 않는다. 또한 Public 키워드까지 앞에 붙이면 전역 변수라 볼 수 있다.
  • 메서드 ( Method ) - 메서드는 해당 객체의 행동을 나타내며, 보통 필드의 값을 조정하는데 쓰인다.
    • 인스턴스 메서드 - 인스턴스 변수와 연관된 작업을 하는 메서드이다. 인스턴스를 통해 호출할 수 있으므로 반드시 먼저 인스턴스를 생성해야 한다.
    • 클래스 메서드 - 정적 메서드라고 한다. 일반적으로 인스턴스와 관계없는 메서드를 클래스 메서드로 정의한다.
  • 생성자 ( Constructor ) - 생성자는 객체가 생성된 직후에 클래스의 객체를 초기화하는데 사용되는 코드 블록이다. 메서드와 달리 리턴 타입이 없으며, 클래스엔 최소 한 개 이상의 생성자가 존재한다.
    • 클래스 내부에 생성자 선언을 생략하면 컴파일러가 내용이 비어있는 기본 생성자를 바이트 코드에 자동으로 추가한다.
    • new 연산자로 호출되는 특별한 중괄호 {} 블록이며 생성자의 역할은 객체 생성시 필드를 초기화하고, 메소드를 호출해서 객체를 사용할 준비를 한다.
    • 리턴 타입이 없다.
    • 생성자를 실행시키지 않고 클래스로부터 객체를 만들 수 없다.
    • 생성자가 생성되면 Heap Area 에 객체가 생성되고 객체의 주소가 리턴된다.
  • 초기화 블록 ( Initializer ) - 초기화 블록 내에서는 조건문,  반복문 등을 사용해 명시적 초기화에선 불가능한 초기화를 수행할 수 있다.

 

  • 접근 제어자  - 접근 제어자는 해당 클래스 또는 멤버를 정해진 범위에서만 접근할 수 있도록 통제하는 역할을 한다. 클래스는 public 과 default 밖에 쓸 수 없다.

  • static - 변수, 메서드는 객체가 아닌 클래스이다.  
  • final - 클래스 앞에 붙으면 해당 클래스는 상속될 수 없다.  변수 또는 메소드 앞에 붙으면 수정되거나 오버라이딩 될 수 없다,
  • abstarct 
    1. 클래스 앞에 붙으면 추상 클래스가 되어 객체 생성이 불가능하고, 접근을 위해선 상속받아야 한다.
    2. 변수 앞에 지정할 수 없다. 메서드 앞에 붙는 경우는 오직 추상 클래스 내에서의 메서드밖에 없으며 해당 메서드는 선언부만 존재하고 구현부는 상속한 클래스 내 메서드에 의해 구현되어야 한다.
  • transient - 변수 또는 메서드가 포함된 객체를 직렬화할 때 해당 내용은 무시된다.
  • synchronized - 메서드는 한 번에 하나의 쓰레드에 의해서만 접근 가능하다.
  • volatile - 해당 변수의 조작에 cpu 캐시가 쓰이지 않고 항상 메인 메모리부터 읽힌다.

ㅇthis 키워드 이해하기

생성된 객체에서도 본인을 뜻하는 용어가 'this' 이다. 

this.필드명 혹은 this.메서드명으로 객체의 필드나 메서드에 접근할 수 있다.

 

또한 생성자에서는 this() 를 사용할 수 있는데 이는 또 다른 명시적 생성자에 접근하는 방식이다. 

 

 

 

 

'Live-Study' 카테고리의 다른 글

6 주차 - 패키지  (0) 2021.06.21
3주차 : 연산자  (0) 2021.03.20
2주차 : Java 데이터 타입, 변수 그리고 배열  (0) 2021.03.07
1주차 : JDK 와 JRE 차이  (0) 2021.02.28
1주차 : JVM 구성 요소  (0) 2021.02.28