728x90

객체가 생성될 때 자동으로 실행되는 메소드( )

즉, 생성자 없이는 객체를 만들 수 없다.

 

메소드와 유사한 형식을 가지고 있지만 기능적인 부분에서 차이가 있다.


생성자의 기능

 

  1.  클래스의 객체 생성
  2.  멤버 필드 초기화
  3.  필요에 따라 초기화 메소드 실행

생성자의 형식

 

  1. 생성자의 이름은 반드시 클래스 이름과 같아야 한다.
  2.  메소드가 아니기 때문에 리턴타입을 선언할 수 없다.

기본 생성자 (Default Constructor)

 

파라미터가 없는 생성자.

 

기본 생성자를 이용해서 생성된 객체를 기본 객체라고 하며, 모든 필드값은 기본 값으로 초기화된다.

 

자바에서는 일반적으로 컴파일 시에 기본 생성자를 자동으로 넣어주지만,

클래스에 생성자가 하나라도 있다면 기본 생성자는 제공되지 않는다.


예제 1.

<기본 생성자>

class ABC{
	public ABC() {	//생성자
		System.out.println("여기다가 적어주면 실행되나요?");
	}
	
	public void work() {	
	}
}

public class Constructor {
	public static void main(String[] args) {
		ABC a1 = new ABC();		
	}
}

[실행결과]

여기다가 적어주면 실행되나요?

'JAVA' 카테고리의 다른 글

오브젝트 (Object)  (0) 2021.07.19
접근제어자 (AccessModifier)  (0) 2021.07.18
오버로드 (Overload)  (0) 2021.07.18
오버라이드 (Override)  (0) 2021.07.18
스태틱 (Static)  (0) 2021.07.18
728x90

한 클래스 내에서 같은 이름의 메소드를 시그니쳐만 다르게 해서 여러 개 정의하는 것을 오버로드 또는 오버로딩 이라고 한다.

 

오버로딩의 조건 :

  • 메소드의 이름이 같아야 한다
  • 메소드의 반환타입이 같아야 한다
  • 매개변수의 메소드 시그니쳐가 달라야 한다.
    ※파라미터의 개수, 순서, 타입이 다르면 다른 메소드로 취급되는데,
       이
     개수, 순서, 타입'메소드 시그니쳐'라고 한다.

※ 메소드를 호출할 때 메소드명과 시그니쳐까지 같다면 같은 메소드로 인식하여 에러가 발생한다.

 

ex)

public void overLoad(){
}
public void overLoad(int i){
}
public void overLoad(String i){
}
public void overLoad(int i, String str){
}
public void overLoad(String str, int i){
}

'JAVA' 카테고리의 다른 글

접근제어자 (AccessModifier)  (0) 2021.07.18
생성자 (Constructor)  (0) 2021.07.18
오버라이드 (Override)  (0) 2021.07.18
스태틱 (Static)  (0) 2021.07.18
객체지향 프로그래밍 (Object Oriented Programming)  (0) 2021.07.14
728x90

상속받은 부모 메소드를 자식 클래스에서 재정의 하여 상황에 맞게 활용하는 것

 

재정의하는 것이기 때문에 메소드 이름, 리턴 타입, 파라미터 등은 동일해야 한다.

오버라이드 하는 메소드 위에 @Override 를 넣어주어 오버라이드 된 메소드임을 표시해준다.

상속 관계(부모관계 or 인터페이스)에서만 사용가능

 

 

※ 오버라이드 시 주의점

  1. 메소드의 형식은 상속받은 메소드와 동일해야 한다.
  2. 접근제어자는 반드시 부모의 것과 같은 범위거나 더 큰 범위여야 한다.
  3. 재정의된 메소드의 부모 메소드는 자식의 것에서는 은닉(Hide)되어지기 때문에,
      직접적으로는 더이상 호출되지 않는다.
  4. 은닉된 부모 메소드를 호출할 때엔 부모 객체를 호출하는 키워드 super를 통해 호출한다. 

ex)

class OldMan{
	String name;
	String ssn;
	
	public OldMan(String name, String ssn) {
		this.name = name;
		this.ssn = ssn;
	}
	
	public void myInfo() {
		System.out.println("이름은 " + name + "입니다.");
		System.out.println("주민번호는 " + ssn + "입니다.");
	}
}

class NewMan extends OldMan{
	String tel;
	
	public NewMan(String name, String ssn, String tel) {
		super(name, ssn); //부모의 생성자 활용
		this.tel = tel;
	}
	
	@Override
	public void myInfo() {
		//super.myInfo(); 부모의 myinfo메소드 활용 가능
		System.out.println("내 이름은 " + name + "입니다.");
		System.out.println("내 생년월일은 " + ssn.substring(0, 6) + "입니다.");
		System.out.println("내 전화번호는 " + tel + "입니다.");
	}
}

public class Inher03 {
	public static void main(String[] args) {

		OldMan o01 = new OldMan("홍길동", "123456-7894562");
		o01.myInfo();
		NewMan n01 = new NewMan("김길동", "123456-7894562", "010-5255-9001");
		n01.myInfo();
	}
}

[실행결과]

이름은 홍길동입니다.
주민번호는 123456-7894562입니다.
내 이름은 김길동입니다.
내 생년월일은 123456입니다.
내 전화번호는 010-5255-9001입니다.

'JAVA' 카테고리의 다른 글

생성자 (Constructor)  (0) 2021.07.18
오버로드 (Overload)  (0) 2021.07.18
스태틱 (Static)  (0) 2021.07.18
객체지향 프로그래밍 (Object Oriented Programming)  (0) 2021.07.14
MessageFormat  (0) 2021.07.14
728x90

자바에서는 정적 개념과 동적 개념을 구분하고 있다.

쉽게 표현하면 클래스가 로드되는 시점을 정적

로드된 클래스가 실행된 이후를 동적 이라고 한다.

 

이 중 객체는 동적 데이터라고 해서 프로그램이 실행된 이후에 발생되는 대표적 형태이다.

 


인스턴스 멤버와 정적 멤버

 

    • 인스턴스 멤버 : 
      객체를 생성한 후 사용할 수 있는 필드와 메소드
      별도의 기억공간을 가지고 객체마다 각각 다른 값을 가진다.
      객체명. 변수명으로 호출

    • 정적 멤버 (클래스 멤버) :
      객체를 생성하지 않고 사용할 수 있는 필드와 메소드
      클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 한다.
      모든 객체를 통틀어 하나만 생성
      하나의 클래스에 하나의 변수만 가능
      같은 클래스에서 나온 모든 객체가 공유

      static을 붙여 선언한다.
      클래스. 변수명으로 호출

정적 메소드

 

정적 메소드 또한 정적 멤버처럼 static을 붙여 만들 수 있다.

대표적은 예로 main메소드가 있는데 이는 객체 생성 없이 main메소드를 호출하기 위해서이다.

 

※사용 시 주의사항

  • 인스턴스 변수, 메소드 사용 불가
    객체가 생성되지 않은 상태에서 호출되는 메소드 이므로
    객체 안에서만 존재하는 인스턴스 변수들을 사용할 수 없다.
  • this 사용 불가
    this가 참조할 인스턴스가 존재하지 않음
  • 정적 변수와 지역 변수만 사용 가능
    (정적 메소드에서 정적 메소드 호출 가능)
  • ex) final을 붙인 상수는 모두 다 같이 쓰는 변수이다.

      따라서 객체를 만들지 않고 static을 붙여주는 것이 좋다.

 

 

'JAVA' 카테고리의 다른 글

오버로드 (Overload)  (0) 2021.07.18
오버라이드 (Override)  (0) 2021.07.18
객체지향 프로그래밍 (Object Oriented Programming)  (0) 2021.07.14
MessageFormat  (0) 2021.07.14
currentTimeMillis  (0) 2021.07.14

+ Recent posts