이롭게 현명하게
[JAVA] 자바 객체와 클래스 본문
목차
객체와 클래스
클래스 선언
객체 생성과 클래스 변수
클래스의 구성 멤버
필드
생성자
메소드
<정리>
클래스(class) : 객체를 만들어내기 위한 설계도 혹은 틀, 객체의 속성(state)과 행동(behavior) 포함
객체(Object) : 클래스의 모양 그대로 찍어낸 실체
- 프로그램 실행 중에 생성되는 실체
- 메모리 공간을 갖는 구체적인 실체
- 인스턴스라고도 부른다.
public class ClassName{
//필드 : 객체의 데이터가 저장되는 곳
int fieldName;
//생성자 : 객체 생성 시 초기화 역할 담당
ClassName(){ ... }
ClassName(자료형 변수명){ ... }//오버로딩
//메소드 : 객체의 동작에 해당하는 실행 블록
void methodName() { ... }
void methodName(자료형 변수명) { ... } // 오버로딩
}
<객체 생성>
new 객체
생성자 : 객체가 생성될 때 초기화를 위해 실행됨
<생성자 특징>
- 클래스 이름과 반드시 동일
- 생성자 여러 개 작성 가능(오버로딩)
- 리턴 타입을 지정할 수 없음
- 생성자의 목적은 객체 초기화
- 생성자는 객체가 생성될 때 반드시 호출됨(하나 이상 선언되어야 한다.)
메소드 : 클래스의 멤버함수
접근지정자 리턴타입 MethodName(매개변수1, ... ) { ... }
[객체와 클래스]
현실 세계에서 자동차를 만들기 위해서는 설계도를 보고 자동차를 만들어야 한다.
객체 지향 프로그래밍에서도 설계도를 보고 자동차를 만든다.
이때 객체지향 프로그래밍에서의 설계도는 클래스라고 한다.(Class)
클래스(Class) : 객체를 만들어 내기 위한 설계도 혹은 틀
- 객체의 속성(state)과 행동(behavior) 포함
객체(Object) : 클래스의 모양 그대로 찍어낸 실체
- 프로그램 실행 중에 생성되는 실체
- 메모리 공간을 갖는 구체적인 실체
- 인스턴스(instance)라고도 부른다.
[클래스 선언]
public class 클래스이름{
}
<클래스 이름>
- 첫 자를 대문자로 하고 나머지는 소문자로 작성(ex. 카멜 표기법)
- 서로 다른 단어가 혼합된 이름을 사용한다면 각 단어의 첫머리글자는 대문자로 작성(ex. 파스칼표기법)
클래스 이름을 정했다면 "클래스이름.java"로 소스를 생성한다.
소스 파일 이름도 대문자를 구분하므로 반드시 클래스 이름과 대소문자가 같도록 해야 한다.
// Car.java //
public class Car{
}
두 개 이상의 클래스가 선언된 소스파일을 컴파일하면 바이트 코드 파일은 (.class) 클래스를 선언한 개수만큼 생긴다.
소스 파일은 클래스 선언을 담고 잇는 저장 단위일 뿐, 클래스 자체가 아니다.
코드를 컴파일하면 Car.class 와 Tire.class 가 각각 생성된다.
※ 주의! 파일이름과 동일한 이름의 클래스 선언에만 public 접근 제한자를 붙일 수 있다.
파일 이름과 일치하지 않는 클래스 선언에 public 접근 제한자를 붙이면 컴파일 에러가 발생한다.
소스파일 하나당 동일한 이름의 클래스 하나를 선언하는 것이 좋다.
// Car.java //
public class Car {
}
class Tire{
}
[객체 생성과 클래스 변수]
클래스로부터 new 연산자를 사용하여 객체를 생성한다.
new 클래스();
클래스 변수 = new 클래스();
new : 클래스로부터 객체를 생성시키는 연산자
- new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.
- 메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없다. 그래서 new 연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소를 리턴하도록 되어있다.
c1과 c2가 참조하는 Car 객체는 완전히 독립된 서로 다른 객체이다.
public class Car {
public static void main(String[] args) {
Car c1 = new Car();
System.out.println("c1 변수가 Car 객체를 참조한다.");
Car c2 = new Car();
System.out.println("c2 변수가 또다른 Car 객체를 참조한다.");
}
}
<클래스의 용도>
- 라이브러리용(API : Application Program Interface)
- 실행용
라이브러리 클래스 : 다른 클래스에서 사용할 목적으로 설계
실행용 클래스 : 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할
대부분의 객체지향 프로그램은 라이브러리(부품 객체 및 완성 객체)와 실행 클래스가 분리되어 있다.
[클래스의 구성 멤버]
public class ClassName{
//필드 : 객체의 데이터가 저장되는 곳
int fieldName;
//생성자 : 객체 생성 시 초기화 역할 담당
ClassName(){ ... }
//메소드 : 객체의 동작에 해당하는 실행 블록
void methodName() { ... }
}
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
[ 참고자료 ]
'JAVA' 카테고리의 다른 글
[JAVA] 자바 클래스 생성 (0) | 2023.04.14 |
---|---|
[JAVA] 자바 클래스 필드 (0) | 2023.04.13 |
[JAVA] 객체 지향 프로그래밍 (0) | 2023.04.11 |
[JAVA] 데이터 타입 분류와 메모리 영역 (0) | 2023.04.10 |
[JAVA] MySQL 이클립스 연동하기 (0) | 2023.01.25 |