2022/04/18 Spring & Java

김석진·2022년 4월 18일
0

다시 초심으로

목록 보기
2/19

생성자(constructor)

생성자

생성자의 기본문법 <class_name>([<argument_list]){[<statements]}

생성자는 일반함수처럼 기능을 호출하는 것이 아닌 객체를 생성하기 위해 사용되며 new 키워드와 함께 사용한다 ex) new Student();

객체가 생성될때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출한다.

생성자는 반환 값이 없고 클래스의 이름과 동일하다

대부분의 생성자는 외부에서 접근 가능하지만, 필요에의해서 private로 선언되는 경우도 있다.

자바에서 객체를 사용할때 항상 생성자를 사용해야함
생성자는 힙 메모리에 인스턴스가 생성이 됨

기본 생성자( default constructor)

클래스에는 반드시 적어도 하나 이상의 생성자가 존재하며 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출 할 수 있다.
클래스에 생성
생성자를 하나도 제공하지않으면 기본 생성자가 만들어짐
-> 컴파일러가 생성자 코드를 넣어준다 public Student(){}
매개변수가 없으며 구현부가 없다는것이 특징이다.

오버로딩(overloading)

메서드명은똑같고 매개변수만 다른경우 오버로딩된것이라고 말함
오버로딩을 제공하는이유는 사용하는쪽에 편의성을 제공하기 위함

생성자정의하기

  • 생성자를 구현해서 사용할 수 있다
  • 클래스에 생성자를 따로 구현하면 기본생성자는 제공되지 X
  • 생성자를 호출하는 코드(client코드)에서 여러생성자중 필요에 따라 호출해서 사용할 수 있다.

참조 자료형 변수

참조자료형

변수의 자료형

참조 자료형은 클래스형으로 변수를 선언하는 것이고 기본자료형(int,float,double)은 사용하는 메모리의 크기가 정해져있지만 참조자료형은 클래스에 따라 다르다.
참조자료형 object 형의 객체타입이므로 참조자료형을 사용할때는 해당 변수를 선언을하고 쓸수 없다 즉 참조자료형은 Object형의 객체 타입이므로 생성을 해서 써야한다
(but String의 경우는 예외적으로 생성하지 않고 사용할 수 있다.)

접근제어지시자(access modifier)와 정보은닉(information hiding)

접근 제어 지시자(access modifier) 하는 역할이 뭔지 information hiding->캡슐화 왜중요한지에 대해서 공부해볼것

패키지의 역할은 소스의 묶음이라고 생각하면됨

  • 클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 이다.
  • private : 같은 클래스 내부에서만 접근 가능(외부 클래스, 상속관계의 클래스에서도 접근 불가)
  • 아무것도 X(default):같은 패키지 내부에서만 접근 가능(상속관계라도 패키지가 다르면 접근불가)
  • protected: 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
  • public : 클래스의 외부 어디에서나 접근 할수 있음

+) private으로선언하지 않고 default로 선언하면 문제점.-> 멤버변수에 막 접근하여(오용) 객체가 잘못사용되는것을 노출하게되고 객체역할에 대해 문제가 될 수 있다.
즉, 객체에 사용되는 멤버변수에서 문제가 될만한 것들을 private 으로 막아주고 클래스 메서드에서 제어를 통해서 객체의 오류를 방지할수잇다.

get()/set()메서드

private으로 선언한 멤버변수를 외부에서 접근하고 싶을때 get/set 메소드를 사용해서 private로 선언된 변수를 접근할수있도록 public으로 제공할수있다.
get() 메서드만 제공하는 경우 read-only필드이다

정보은닉

객체의 멤버변수에 접근제한을 걸면서 오류를 막을수있다 public으로 오픈할건 오픈하고 오용이될만한 값들은 private으로 제한을 걸어야함
즉 객체지향 프로그램에서 정보은닉은 필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하고 클라이언트에게 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.

profile
주니어 개발자 되고싶어요

0개의 댓글