반응형
본 게시물은 개인 공부용 포스트 입니다.
1. 클래스 정의와 사용
1) 메소드 정의
- 클래스 정의 내부에 존재.
- 헤더와 몸체로 구성
메소드 정의 문법
[접근 제어자] 반환형 메소드이름 ([자료형 인자[, 자료형 인자...]]){
문장 ...
}
//예제
public double getArea(){
return radius * redius * PI;
}
2) 생성자
- 객체가 생성될 때 자동으로 실행되는 메소드 (객체의 필드 값을 초기화하거나 메모리 할등 당의 작업)
- 형식 - new 클래스 이름(인자...)
- new 연산자를 이용하여 객체를 생성(메모리 할당) 하고 생성자가 호출(데이터 필드의 초기화)되면서 객체의 잠조값을 변수에 대입(=)
- 생성자는 보통의 메소드 정의 방법과 다르게 new 객체를 생성할 때 자동으로 호출됨
- 정의할 때, 생성자 이름은 반드시 클래스 이름과 같음
- 반환형 선언 X
- 여러 생성자 정의 가능 (생성자 오버로딩) -> 인자의 개수와 인자의 자료형으로 구분
- 접근 제어자는 보통 public으로 정의
예제
Class Circle{
double r;
public Circle(double a){ //생성자 정의
r = a;
}
public double getArea(){
return r * r * 3.14;
}
}
public class CircleArea2{
public static void main(String args[]){
Circle c = new Circle(5.0); //생성자 호출
System.out.println(c.r); //생성자를 호출하면서 r의 값이 5.0이 되었기 때문에 5.0이 출력됨
System.out.println(c.getArea());
}
}
3) 기본 생성자
- 인자가 없는 생성자 (디폴트 생성자)
- 클래스 정의에 한 개의 생성자 정의도 없을 시, 컴파일러가 자동으로 만듦 -> 예) public Circle(){ }
- 생성자 몸체의 첫 줄에 부모 생성자의 명시적 호출이 없다면 super();이 자동으로 들어감
4) 클래스 사용
// 상속할 때 extends 사용
class CSub extends SCuper{ ... } // Csub이 자식, SCuper이 부모 클래스.
// 변수를 선언하고 객체 생성
Circle c;
c = new Circle(5);
5) static 필드
- = 정적 필드 or 클래스 변수
- 클래스의 모든 객체가 공유하는 데이터 (객체의 생성 없이도 항상 사용가능!) (어떤 객체도 값을 변경할 수 있음)
- 사용 형식 -> 클래스이름.정적필드
어떤 곳에서든 이 static 필드의 값을 바꿀 수 있다는 점이 중요함. (공간이 1개만 있는 것)
6) static 메소드
- = 정적 메소드 or 클래스 메소드
- 객체와 무관하게 호출되고 실행됨 (메소드 몸체에서 this 사용 불가)
- static 필드와 인자를 가지고 작업
- 사용 형식 -> 클래스 이름.정적메소드() -> 예) Math.sqrt(2.0);
7) final
final 필드
- 상수 데이터를 선언
- 선언할 때 초기값 지정 필수
- 자주 static과 함께 사용됨. (객체마다 값을 가지고 있을 필요가 없기 때문)
final 메소드
- 자식 클래스로 상속은 가능하나 재정의 X
8) 객체 초기화
객체 초기화 : 객체를 생성할 때, 데이터 필드에 초기값을 지정하는 것 (클래스 변수는 프로그램 시작 시 자동 초기화 됨)
데이터 필드는 자동으로 초기값이 주어질 수 있음!
객체 초기화 순서
- 인스턴스 필드의 선언문에서 초기화
- 인스턴스 초기화 블록 실행
- 클래스 몸체 내 임의 위치에 포함
- 초기값 지정을 위한 코드
- static 필드는 static 블록을 사용
- 생성자 실행
class IniTest{
int nValue = 1; // 1번 과정
{
nvlaue = 2; // 2번 과정
}
public IniTest()}
nvlaue = 3; // 3번 과정
}
}
예제
import java.awt.Point;
class Rectangle(){
public int width = 0;
public int height = 0;
public Point origin;
public Rectangle(){
origin = new Point(0, 0); //Rectangle 객체가 생성될 때, origin 객체 초기화됨
}
public Rectangle(Point p, int w, int h){
origin = p; //origin = Point(x=23, y=94)
width = w; //width = 100
height = h; //height = 200
}
}
public class Test{
public static void main(String args[]){
Point originOne = new Point(23, 94); //x=23, y=94인 point 객체 생성.
Rectangle rectOne = new Rectangle(originOne, 100, 200);
}
}
9) 메소드 오버로딩
- 인자의 개수나 인자의 자료형이 다르면 같은 이름의 메소드를 한 클래스에서 여러 개 정의할 수 있음 (인자의 개수와 자료형이 정확히 일치하면 안됨.)
- 메소드를 호출할 때, 가장 가까운 매개변수 목록을 가진 메소드가 호출됨.
예)
System.out.println(); //인자없음
System.out.println("문자열"); //인자 Stirng
System.out.println(123456); //인자 int
반응형
'IT > 개발공부' 카테고리의 다른 글
java stream에 대해 알아보자 (0) | 2023.06.12 |
---|---|
Java 패키지, 예외처리 (0) | 2023.06.08 |
Java 제네릭, 람다식 (0) | 2023.06.08 |
Java 인터페이스, 다형성 (추상 클래스, 열거 자료형, 익명 클래스) (0) | 2023.06.08 |
Java 기본 문법 (배열, 문자열, Scanner 클래스와 입출력, 클래스 정의) (0) | 2023.06.07 |