본문 바로가기
Programming/Java

[Java] 클래스

by AI_Wooah 2020. 10. 5.

클래스 목표

  • [ ] 클래스 선언
  • [ ] 클래스 예약어와 접근 제한자
  • [ ] 변수의 종류별 라이프사이클
  • [ ] field(필드)
  • [ ] constructor(생성자)
  • [ ] method(메소드)

클래스 선언

[접근제한자][예약어] class 클래스명{ <- 클래스 시작영역
	자료형 변수명; //속성값 설정
	자료형 변수명; //속성값 설정

	//속성과 기능을 클래스 안에 (){}에 작성할 수 있다.
	//생성자명의 맨 앞글자는 대문자로 해야 한다. 만약 pName 같이 첫글자가 한 글자인 경우는 소문자로 한다.
	[접근제한자] 생성자명(){}

	//기능정의 설정
	[접근제한자] 리턴형 메소드명(매개변수){
			기능정의
	}
} <- 클래스 종료영역

 

 

클래스 선언 예

public class Person {
	//field(필드)
	private String name; //외부에서 해당 값에 접근하면 문제가 생길 수도 있기 때문에 직접 접근하지 못하도록,
	private int age; //컨트롤할 수 있게 메소드에 포함을 시켜놓고 모든 필드에는 private를 걸어놓는 것이 캡슐화의 원칙이다.
	
	//constructor(생성자)
	public Person(){}
	
	//method(메소드)
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
}

 

  • 캡슐화를 이용하기 위해서 속성과 기능을 하나의 클래스에 묶어서 작성을 하게 된다. 속성과 기능이 함께 들어있는 클래스 중에서 모든 속성에 접근제한자를 걸고 그 속성에 간접적으로 접근할 수 있도록 public method를 내부에 함께 작성하는 기법을 캡슐화라고 한다.

클래스 접근 제한자

  • 접근제한자는 두 가지만 가능하다
    • private은 해당 클래스 외에서 직접 접근할 수 없게 만든 것이다.
    • default는 같은 패키지 내에서만 사용 가능하고 외부에서는 사용이 절대 불가능하다. 아무런 표시도 하지 않는 것으로 표현한다.
    • public은 같은 패키지 내에서나 전체에서 사용 가능하며 '+'로 표현한다.
    • →접근제한자는 기본적(default)으로 생략이 가능하며 사용할 수 있도록 따로 명시해준 것이 public이다.

예약어

클래스 선언시에 사용 가능한 예약어가 있다. 서로 상반되는 조건을 가지고 있기 때문에 두 개의 예약어를 동시에 사용할 수 없다.

  • final : 클래스를 더이상 변경이 불가능한 상수와 같은 개념의 클래스이다. 상속도 불가능하다.
    • final이 붙을 수 있는 곳
    final 변수 → 상수
  • final 클래스 → 상속
  • abstract : 클래스 내에 추상 메소드가 선언되어 있는 추상클래스이다. final과 반대로 상속이 강제화 되어 자식객체가 완성해야 하는 조건을 가지고 있다.

클래스 안에 세 가지를 작성할 수 있다.

  • 필드
  • 생성자
  • 메소드

필드(속성 = 전역변수 = 멤버변수 = 인스턴스 변수)

변수의 선언 위치에 따라 구분하며 크게 클래스변수 멤버변수 지역변수로 나눠진다.

  • 메소드 영역에 선언되는 변수 지역변수지역변수인 경우에는 스택에 공간이 만들어진다.
    • 메모리쪽으로 값을 주는 것이 매개변수 매개변수로 값을 전달하고 리턴으로 값을 가지고 온다. 리턴은 메모리가 빠져나가면서 메모리 공간을 비우는 것이며, 값이 있는 경우 가지고 리턴될 수도 있다.
  • 괄호 안에 선언된 변수를 매개변수라고 하며 매개변수는 일종의 지역변수이다.
  • 클래스 영역이 아닌 method(메소드), constructor(생성자), 초기화블럭 내부에서 선언된다.
  • 메소드 바깥에 선언되는 변수 전역변수(인스턴스 변수, 멤버변수)heap은 동적 메모리 영역, 자유 메모리 영역이라고도 한다.
  • 인스턴스 변수는 heap 영역에 공간이 생성 된다.
  • 클래스변수static의 영역을 정적 메모리 영역, 클래스 영역이라고도 한다.
  • 클래스 변수는 static 영역에 저장되며 static 키워드를 가짐.

각 변수가 가지고 있는 라이프사이클

  • 스택은 지역변수 메소드 호출할 때 생성된다. 메소드 종료될 때 삭제된다. (메소드 호출시 / 메소드 종료시)
  • 힙에 뉴를 할 때 생성된다. 가비지컬렉터에 의해 삭제된다. (new / gc)
  • 스태틱은 프로그램이 시작될 때 시작되고 프로그램 종료 시 없어진다.( 프로그램 시작시 / 프로그램 종료시)

클래스 필드 예약어

static은 공유할 목적으로 사용되기 때문에 new를 사용할 필요 없이 다른 클래스에서도 사용 가능하다.

프로그램 시작시에 정적 메모리영역에 자동 할당되는 멤버에 적용한다

캡슐화는 공유와 상반되는 개념이기 때문에 static사용을 지양한다.

[표현식] 접근제한자 class 클래스명 { 접근제한자 static 자료형 변수명; }

jvm이 정한 초기값이 들어가게 된다.

같은 값을 가지고 사용하고 힙에 있는 같은 영역을 사용하는 것 얕은복사

필드와 메소드에만 스태틱 붙일 수 있다.

public

스태틱이나 파이널은 작성 순서가 상관 없다.

필드 작성 방법

[표현식] 접근제한자 class 클래스명 { 접근제한자 자료명 변수명[=초기값]; }

클래스 필드 접근 제한자

클래스 초기화 블럭

대부분은 JVM이 자동으로 초기화를 해주지만,

static은 jvm이 자동으로 초기화를 해주지 않기 때문에 초기화 값을 직접적으로 뒤에 써주는 것을 명시적 초기화라고 한다.

//스태틱 키워드 붙은 것은 스태틱 초기화 블럭

//안붙은 것은 인스턴스 초기화 블럭

명시적 초기값을 덮어쓴다.

생성자

생성자 선언은 메소드 선언과 유사하나 리턴형을 작성하지 않는다.

클래스 이름이랑 똑같이 지정해줘야 한다,

클래스 생성자

this

객체가 만들어져야만 주소값 생성

오버로딩

생성자 이름 같은걸로 여러개 만들고 싶을 때 매개변수 타입, 개수, 순서 다르게 해야 하는것

오버라이딩

부모에게 상속받은 메소드를 변경하는 것

syncronized

공유할 수 있는 객체가 있고 공유하는 객체 int age가 20이라는 값을 가지고 있을 때 getter, setter가 함께 있을 때 쓰레드 파일을 전송하는동안 채팅메세지를 주고받는 일을 하는 각각의 쓰레드가 있어서 멀티쓰레드로 얘쪼끔얘쪼끔 번갈아가면서 동시에 되는것처럼 일을 처리한다 이 때 싱크로나이즈드를 통해 한 쓰레드가 끝나기 전까지 다른 객체가 쓰레드 값을 바꾸는 것을 막아 교착상태를 방지한다.

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 연산자  (0) 2022.03.07
[Java] 변수(Variable)  (2) 2020.10.26
[Java] 프로그래밍 기초  (0) 2020.10.26
[Java] 상속을 사용하는 목적과 장점  (1) 2020.10.07
[Java] 객체와 클래스의 정의 및 차이점  (0) 2020.10.05

댓글