-
클래스/생성자java/java_basic 2020. 10. 16. 12:17
java는 객체 지향 언어이다.
객체
의사나 행위가 미치는 대상
ex) 휴대폰, 책상, 카메라, 컴퓨터 등등
일상에서의 객체의 특징
- 객체마다 고유한 state와 behavior를 가짐
- 다른 객체들과 정보를 주고 받는 등, 상호작용하면서 존재
캡슐화
-
객체를 캠슐로 싸서 내부를 보호하고 볼 수 없게 하는 것
-
외부의 접근을 관리함(TBD)
-
java의 캡슐화
-
class: 객체 모양을 선언한 틀(캡슐화)
-
method(멤버 함수)와 field(멤버 변슈)는 모두 class 내에 구현
-
-
객체
-
글래스 모양대로 생성된 실체(instance)
-
절차 지향 프로그래밍과 객체 지향 프로그래밍
-
절차 지향 프로그래밍
-
작업 순서 표현
-
작업을 함수로 작성한, 함수들의 집합
-
-
객체 지향 프로그래밍
-
객체들간의 상호 작용으로 표현
-
클래스 혹은 객체들의 집합으로 프로그램 작성
-
클래스와 객체
-
클래스(class)
-
객체를 만들어내기 위한 설계도 혹은 틀
-
객체의 속성(state)과 행동(behavior) 포함
-
-
객체
-
클래스의 모양 그대로 찍어낸 실체
-
프로그램 실행 중에 생성되는 실체
-
메모리 공간을 갖는 구체적인 실체
-
instance라고도 부름
-
-
ex)
-
class: 자동차 사람 휴대폰
-
객체: 소나타 장근원 갤럭시
-
클래스 선언
class 클래스_이름{
필드_선언
객체생성자_선언
메소드_선언
}
- 1. 클래스 이름
- 키워드 class 다음에 명시되는 식변자(클래스 이름)
- 객체의 상태와 행동 정의
- 선언되는 클래스를 대표하는 이름
- 객체 생성 시 사용 (TBD)
- 클래스 이름의 문자 구성과 명명 원칙
- 첫 문자는 영어 대문자로 시작: Class
- 여러 단어 결합할 경우 각 단어의 첫 문자를 대문자로 시작: itaswonClass
- 키워드 class 다음에 명시되는 식변자(클래스 이름)
- 2. 필드 선언
- 객체의 상태 저장할 변수
- 필드 타입: 기본 타입, 클래스 타입, 배열 타입 등 모든 타입 가능
- 필드명: 영어 소문자로 시작하는 것이 관례, 여러 단어로 구성되면 2번쨰 이후 단어의 첫문자는 대문자
- string currentLocation
- string name
- int age 등등
- 객체의 상태 저장할 변수
- 3. 객체 생성자 선언
- 클래스 객체가 생성될 때, 초기화 작업을 수행하는 특별한 메서드
- 객체 생성자는 클래스 이름과 같은 이름의 메서드로 선언되어야 한다
- 매개 변수 가질 수 있으며, 반환값 타입 없음
- 클래스 객체가 생성될 때, 초기화 작업을 수행하는 특별한 메서드
- 4. 매서드 선언
- 매서드 시크니처와 매서드의 구현으로 구성됨
- 메서드 시그니처
- 메소드 호출에 필요한 정보 표시: 메서드 반환값 타입, 메서드 이름, 매개변수 등
- 메서드 구현
- 메서드가 호출되었을 때 수행할 문장들 기술한다.
- -> 매서드는 class의 함수라고 생각하면 편하다.
선언된 클래스 사용
클래스가 선언된 후 객체 생성
-> 반드시 new 키워드를 이용하여 생성
ex)
Person mine; -> 클래스 이름 사용, 클래스 타입으로 사용
mine = new Person("mine"); -> 클래스 이름 사용 == 객체 생성자 호출에서 사용할 수 있다.
mine.setAge(29); -> 객체 참조 변수를 메소드 접근 가능
객체 생성 및 참조
Java에서 객체 다루기 위한 4가지 작업
① 클래스 작성: 객체의 상태와 행동 정의하는 클래스 작성
② 객체 생성: 작성된 클래스의 객체 생성
③ 객체 참조: 생성된 객체를 객체 참조변수에 저장하여 참조할 수 있게 함
④ 필드와 메소드 접근: 객체 참조변수 이용하여 참조되는 객체의 필드와 메소드 접근
생성자!!!
- 생성자는 여러 개가 될 수 있다
- 초기화 조건에 따라서 필요에 의해 다양하게 생성할 수 있다
- 매개변수가 없는 생성자도 있다.
- ex) Person g = new Person();
- 매개변수가 없는 생성자는 default생성자로 불린다.
- 클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일러에 의해 자동으로 삽입
- 기본 생성자가 자동 생성되지 않는 경우
- 클래스에 생성자가 하나라도 작성한 경우
- 자신이 구현한 생성자를 사용하겠다고 명시를 한 것
정리
New 연산자와 함께 호출됨
기본생성자 (default) + 매개변수를 갖는 개발자가 구현한 생성자
이점
- 간결한 프로그램
- 객체 생성과 객체 초기화가 하나의 문장으로 이루어지므로 프로그램이 간결해진다.
- 높은 응집도:
- 객체 생성과 초기화 작업이 하나의 단위작업으로 이울어지므로 응집도(cohesion) 높임
- 초기화 실수 방지
- 객체 생성 시 객체 생성자 반드시 호출해야 하므로 필수적인 초기화 작업을 실수로 하지 않는 잘못 방지할 수 있음
this 래퍼런스
- this: 객체 자신에 대한 레퍼런스
- 컴파일러에 의해 자동 관리되기 때문에 개발자는 사용하기만 하면 됨
- -> class가 가진 필드명을 가리킨다. == 이름이 똑같은 변수끼리 구분을 해준다.
- -> 하나는 지역변수(or전역변수) 하나는 class가 가진 필드명
- 매개변수명이나 지역변수명이 필드명과 같지 않은 경우 this. 생략 가능
- ->그러나 this.를 습관화 하는게 좋다.
Class field/method
ex)
사람은 모두 각각 눈을 가지고 태어난다
세상에는 이미 공기가 있다. 태어난 사람은 모두 공기를 공유한다.
-> Person을 New를 통해 생성한 객체들은 name, age 등을 각각 가지고 있지만 공기라는 특성은 모든 Person이 동일하게 소유 또는 공유하고 있다. -> Class field / Class method
Class field / Class method
- Class의 상태와 행동 나타내는 필드와 메소드
- static 키워드가 명시된 필드와 메소드
- 객체 또는 클래스에 의해 참조 가능하지만 대개 클래스에 의해 참조됨
- 객체 생성하지 않고서도 클래스 필드 참조 또는 클래스 메소드 호출 가능
(static: 메모리에 한번 할당 되어 프로그램이 끝날때까지 그 메모리에 값이 유지된다.) -> 정적 변수
Class field, Class method → static member
그냥 field, method → non-static member
class Sample {
int n; // non-static 필드
void g() {...} // non-static 메소드
static int m; // static 필드
static void f() {...} // static 메소드
}
non-static member 특징(인스턴스 멤버)
- 공간적 특성 – 멤버들은 객체마다 독립적으로 별도 존재(인스턴스 멤버라고 부름)
- 시간적 특성 – 필드와 메소드는 객체 생성 후 비로소 사용 가능
- 비공유 특성 - 멤버들은 다른 객체에 의해 공유되지 않고 배타적
static member(클래스 멤버)
- 공간적 특성 - static 멤버들은 클래스 당 하나만 생성 (객체마다 생성 X) -> 클래스 코드가 적재되는 별도의 메모리 공간에 생성된다
- 시간적 특성 – static 멤버들은 클래스만 선언되어 있으면 사용 가능 (객체 생성이랑 무관)
- 공유의 특성 - static 멤버들은 동일한 클래스의 모든 객체에 의해 공유
Class method 언제 쓸까?
프로그램 내에서 공통으로 사용하고자 하는 매서드 클래스 사용한다.