일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- javascript
- dfs
- 크루스칼
- 코테
- 알고리즘
- Java
- JPA
- spring
- 코딩테스트
- JDBC
- 가상컴퓨팅
- DB
- sql
- 공개키 암호화
- 클라우드 컴퓨팅
- jsp
- Queue
- cloud computing
- 자바의정석
- BFS
- data structure
- 생성자
- MVC
- generic class
- Algorithm
- Stack
- python
- 암호학
- 자료구조
- dbms
- Today
- Total
PLOD
[Java] 클래스- 생성자(Constructor) 본문
* 클래스(class)
클래스는 하나의 클래스로부터 여러 개의 객체를 생성하기 위해 사용되는 하나의 판이자, 특정 작업을 수행하기 위한 명령문의 집합. 자바에서는 반드시 new 연산자를 사용하여 객체를 생성한다. 보통 클래스는 변수와 메서드로 이루어져 있다.
// Student 클래스 생성
public class Student{
public String studentName; //학생이름
public int studentNum; //학번
}
위의 클래스를 보면 학생이름 과 학번 변수를 생성해 주었다, 클래스 내에서 생성되는 변수들을 통틀어 필드(인스턴스 필드) 라고 한다.
클래스를 만드는 이유? 객체지향프로그래밍을 위해 객체지향프로그래밍은 자바 프로그래밍의 핵심이다.
*객체지향프로그래밍의 특징
- 추상화
- 캡슐화
- 상속(Abstract)
- 다형성(method overloading, overiding)
* 생성자(Constructor)
생성자는 인스턴스가 생성될 때, 호출되는 인스턴스 초기화 메서드이다. 따라서 인스턴스 변수 초기화 작업에 주로 사용되고 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
Ⅰ . 생성자는 클래스와 이름이 같으며 반환형이 없다.
Ⅱ . 생성자는 객체를 초기화 해주는 역할을 해준다. 생성자는 객체를 생성하려면 반드시 호출해야 한다.
Ⅲ . 생성자는 선언되지 않으면 컴파일러가 자동으로 기본 생성자를 추가한다.
Ⅳ . 생성자는 보통 매개변수를 입력받아 생성되는데 , 이때 this가 사용된다.
// 기본 생성자
public Student(){}
// 생성자 overloading
public Student(int studentNum, String studentName) { // 생성자는 클래스 이름과 같다 + 리턴 값이 없다
this.studentNum = studentNum; //this : 객체 자신에 대한 참조값을 가지고 있다
this.studentName = studentName;
}
위와 같이 생성자끼리 이름이 같고 매개변수를 다르게 하는 것을 생성자 오버로딩(overloading) 이라고 한다.
Card card = new Card();
Card 클래스의 인스턴스를 생성하는 코드를 예로 들어, 수행되는 과정을 단게별로 나누어 보면 다음과 같다.
연산자 new에 의해서 heap 메모리에 Card 클래스의 인스턴스가 생성된다. 그 다음 Card 생성자가 호출되어 수행되고, 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
* 접근제한자
- public : class , package가 동일하지 않아도 모든 접근이 가능
- private : 모든 접근이 불가능하고 같은 class 내에서만 접근 가능
- protected : 상속, 추상관계에서 사용 자식 클래스 , 패키지 내에서만 사용가능
- default : 접근 제한자가 없고 , 같은 패키지 내에서만 접근 가능
* final 멤버
final 필드는 초기값이 저장되면 값을 변경할 수 없다. 보통 변수는 생성자에서 초기화 할 수 있는데, final은 상수이기 때문에 초기화를 못한다. final의 필드명은 대문자로 작성하는 것이 관행이다.
final 클래스는 더이상 상속할 수 없는 종단 클래스를 의미한다. final 메서드도 마찬가지로 종단 메서드를 의미한다. final 메서드는 모든 메서드를 오버라이딩 할 수 없다.
* Static 멤버
인스턴스 필드와 반대 개념, static으로 선언된 필드와 메소드를 의미한다 . 객체를 반드시 사용해야 하는 인스턴스 필드와 메소드와는 달리, 정적 필드와 정적 메소드는 객체 생성 없이 클래스를 통해 접근 할 수 있다.
아래 Temp 클래스를 통해 객체가 생성될 때마다 count 변수를 초기화 시켜주지 않고 1씩 증가 시켜 값을 누적시키고 싷을떄 static을 사용하면 값이 초기화 되지 않는다.
- Temp 클래스
public class Temp {
private int su;
private static int count; // static 변수, class 변수(this,객체명 접근 불가)
public Temp() {
++count; // 누적 가능
}
public void setSu(int su) {
this.su = su;
}
public void disp() {
System.out.println("su : " + su);
System.out.println("count : " + count);
}
public static void countInfo() { // static 메소드는 객체를 생성하지 않고 클래스로 부른다.
System.out.println(count);
}
}
- main 클래스
public class Exam {
public static void main(String[] args) {
Temp a = new Temp();
a.setSu(1);
a.disp();
Temp b = new Temp();
b.setSu(10);
b.disp();
Temp c = new Temp();
c.setSu(77);
c.disp();
Temp.countInfo();
}
}
- 출력
su : 1
count : 1
su : 10
count : 2
su : 77
count : 3
3
'개발 공부 > Java' 카테고리의 다른 글
[Java] interface(인터페이스) (0) | 2023.01.15 |
---|---|
[Java] 업캐스팅(upcasting), 다운캐스팅(downcasting) (0) | 2023.01.13 |
[Java] 접근 제어자(access modifier) (0) | 2022.12.04 |
[Java]상속(Inheritance) (0) | 2022.11.11 |
[Java] 자바 용어 정리 및 원리 (0) | 2022.11.11 |