본문 바로가기

IT/개발공부

Java 클래스 이론

반응형

 

 

본 게시물은 개인 공부용 포스트 입니다.

 

 

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) 객체 초기화

객체 초기화 : 객체를 생성할 때, 데이터 필드에 초기값을 지정하는 것 (클래스 변수는 프로그램 시작 시 자동 초기화 됨)

데이터 필드는 자동으로 초기값이 주어질 수 있음!

 

객체 초기화 순서

  1. 인스턴스 필드의 선언문에서 초기화
  2. 인스턴스 초기화 블록 실행
    1. 클래스 몸체 내 임의 위치에 포함
    2. 초기값 지정을 위한 코드
    3. static 필드는 static 블록을 사용
  3. 생성자 실행
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

 

 

 

 

 

 

반응형