JAVA(7)- 클래스

Wooney98·2022년 11월 10일
2

JAVA

목록 보기
7/8
post-thumbnail

클래스 구성요소

  • 필드(field)
    • 객체 내 값을 저장하는 멤버 변수, 즉, 클래스 안에 있으면서 함수 밖에 있는 전역변수를 의미.
    • 필드 변수는 자동으로 초기화가 되며, String타입은 null, int 타입은 0으로 초기화된다. 객체 생성시 바로 사용이 가능.
    • 클래스 내에 선언된 변수는 멤버필드라 한다. 필드, 변수, 속성 다 같은 의미이다.
  • 지역변수(local)
    • 지역 변수는 메소드 안에서 선언되는 변수들을 의미한다. 해당 메소드(함수)내에서만 사용 가능하며 다른 메소드에서 자신 안에 있는 지역 변수의 사용은 불가능하다.
  • 메소드(method)
    • 클래스 내에서 원하는 기능을 수행하기 위해 코드를 모아둔 곳을 의미한다. 일반적인 함수라고 생각하면 된다.
    • 변수는 private으로 메소드는 public으로 접근 지정자를 선언하며 private의 변수를 get/set을 이용하여 값을 할당하고 가져오는 방식을 주로 사용한다.

생성자(Constructor)

  • 객체가 생성될 떄 자동으로 한번 호출되는 메소드. 클래스 객체 생성시 초기화(선언)를 위해 사용된다. 생성자를 통해 초기화하지 않으면 NullPointerException이 발생한다.
  • 생성자명은 클래스 이름과 반드시 동일해야한다.
  • 클래스를 선언할 때 new와 함께 사용되며 해당 클래스의 같은 이름으로 되어있는 메소드가 실행되면서 클래스를 사용한다는 뜻으로 생각하면 된다.
  • 생성자는 오버로딩이 가능하다. 입력받는 매개변수의 타입과 갯수에 따라 같은 생성자 이름으로 여러개의 생성자를 생성 가능하다. (오버로딩이란 입력받는 매개변수의 타입과 갯수에 따라 같은 함수명으로 여러개 생성할 수 있는 방식. 오버라이딩이란 상속관계의 있어서 자식이 부모가 가진 기능을 자신에 맞게 수정하는 것을 오버라이딩이라 한다.)
public class Circle{
	public int radius; // 원의 반지름 필드
    public String name; // 원의 이름 필드
    
    public Circle(){ } // 원의 생성자 메소드
    public double getArea(){ // 원의 면적 계산 메소드
    	return 3.14*radius*radius;
    }
}	

this 키워드

  • this 키워드는 매개 변수로 받는 변수명클래스 내 멤버 필드의 변수명이 같은 경우 this.(변수명)을 하게 되면 무조건 클래스 내 멤버 필드의 변수명이 선택되게 하는 키워드.
  • this( ) 는 생성자 안에서만 사용이 가능한데, 무조건 생성자 내 천번째 코드로 사용해야한다. 괄호 안에 해당 클래스 내 멤버 변수의 수와 타입만큼 안에 값을 넣어주면 된다.
    this 사용x
public class Circle{
	int radius;
    
    public Circle() { radius = 1; }
    public Circle(int r) { radius = r; }
    double getArea() {
    	return 3.14*radius*radius;
    }
    ...
}

this 사용o

public class Circle{
	int radius; //(1)
    
    public Circle() { this.radius = 1; }
    public Circle(int radius) { 
    				  // (2)
    	this.radius = radius; 
    }  	  //(1)         (2)
    double getArea() {
    	return 3.14*this.radius*this.radius;
    }
    ...
}

메소드 오버로딩(Overloading)

  • 같은 이름의 메소드를 중복하여 정의하는 것을 의미 즉, 메소드 오버로딩은 서로 다른 시그니처를 갖는 여러 메소드를 같은 이름으로 정의하는 것이라고 할 수 있다.
  • 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나.
public static void main(String args[]){
	Sample a = new Sample();
    
    int i = a.getSum(1,2);
    int j = a.getSum(1,2,3);
    double k = a.getSum(1.1, 2.2);
}

public class Sample{
	public int getSum(int i, int j){
    	return i + j;
    }
    public int getSum(int i, int j, int k){
    	return i + j + k;
    }
    public int getSum(double i, double j){
    	return i + j;
    }
}

final 키워드

  • 상수라는 의미로 변수에 적용하면 실행 중 값을 변경할 수 없는 고정된 값을 할당한다.
  • 메소드에 final 키워드를 사용하면 부모에게 상속받아서 override 사용이 불가능하다.

Garbage Collection(가비지 컬렉션)

  • garbage란 가리키는 레퍼런스가 하나도 없는 객체. 즉, 클래스 객체 중 자신을 참조하는 객체가 하나도 없는 것을 의미한다. 불필요한 메모리인 셈이다.

  • 이 이미지처럼 객체가 생성은 되어 있으나 클래스 객체 변수가 생성된 객체를 참조하지 않고 있다면 Garbage라고 한다. 가비지 컬렉션은 메모리에만 할당이 되어 있고 특정 변수가 그 메모리를 참조하지 않고 있다면 이것을 회수하는 역할을 한다.
  • System.gc() 코드로 가비지 컬렉션을 강제로 호출할 수 있다.

접근 지정자

  • public : 패키지 관계 없이 모든 클래스에서 사용 가능함.
  • private : 자신의 클래스에서만 사용이 가능함. 다른 클래스에서 사용 불가능.
  • protected : 같은 패키지 내 다른 클래스에서만 사용이 가능하다. 만약 상속받은 관계이면 서브 클래스가 다른 패키지에 있어도 사용 가능하다.
  • default : 같은 패키지 내 다른 클래스에서 사용이 가능하다.

보통 클래스 내 멤버 변수는 private으로 지정하고 메소드는 public으로 지정한다. private으로 지정한 변수를 public 으로 선언한 get/set을 이용해 멤버 변수에 값을 할당하고 가져온다. 직접적으로 수정하는 게 아닌 한단계 거쳐서 수정/읽기 를 한다고 생각하면 된다.


static

  • 공유라는 개념으로 생각하자.

클래스 내 멤버 변수가 static으로 선언된다면 생성되는 클래스 인스턴스마다 그 멤버 변수를 실행하거나 수정할 때 개개인의 인스턴스마다 멤버 변수가 할당되는 것이 아닌 모든 인스턴스가 하나의 static으로 설정한 멤버 변수를 사용하게 된다.

다른 인스턴스 내 변수 조작으로 전체 인스턴스의 변수가 수정되므로 사용시 주의해서 코딩해야한다.

static을 이용해서 싱글톤 패턴(Singleton-Pattern)을 만들 수 있다.

  • 싱글톤 패턴은 클래스 객체(인스턴스)가 단 1개만 생성되는 것을 의미한다.
  • 이미 인스턴스가 생성이 되어 있으면 그 생성된 인스턴스를 모든 클래스 객체에서 사용한다는 의미이다.
// MyClass 클래스 부분 중 MyClass 타입의 함수를 선언하는 곳이다.
// MyClass의 생성자에는 빈 생성자를 선언한다.
//static 멤버는 객체를 참조할 수 없음
	private static MyClass instance;
	public static MyClass getInstance() {
		//singleton pattern
		//싱글톤 패턴이란 객체의 인스턴스가 1개만 생성되는 것을 의미한다..
		//이미 인스턴스가 생성이 되어있으면 그 생성된 인스턴스를 
        //모든 클래스 객체에서 사용한다는 의미이다.
		//static으로 선언했기 때문에 가능하다.
		if(instance == null) {
			//여기에서 생성자를 호출했으니 모든 선언된 클래스 객체 변수는 
            //같은 값을 가지게 된다.
			instance = new MyClass();		
		}
		//여기 instance는 static으로 선언이 된 instance를 이미 생성된 것이 있다면, 
        //instance에 값이 들어가 있으므로 싱글톤 패턴이라 바로 return 해주면 
        //다른 클래스 인스턴스는 같은 instance를 가지게 된다.
		return instance;
	}
profile
👨Education Computer Engineering 🎓Expected Graduation: February 2023 📞Contact info thstjddn77@gmail.com

0개의 댓글