JAVA 객체지향 프로그래밍

생성자와 this

수업소개

인스턴스를 생성할 때 해야 할 초기화 작업을 정의하는 생성자에 대해서 살펴보는 시간입니다.

 

 

 

강의

소스코드

public class MyOOP {
    public static void main(String[] args) {
		Print p1 = new Print("----");
		p1.A();
		p1.A();
		p1.B();
		p1.B();

		Print p2 = new Print("****");
		p2.A();
		p2.A();
		p2.B();
		p2.B();
		
		
		p1.A();
		p2.A();
		p1.A();
		p2.A();
	}
}

 

댓글

댓글 본문
  1. 제예솔
    생성자 = > 초기에 주입해줘야 하는 값을 전달해줄 때 쓴다. this=> 클래스가 인스턴스화 되었을때 인스턴스를 가르키는 특수한 이름이다
  2. 안광민
    class Constructorapp {
    public String delimiter = "";
    public Constructorapp(String delimiter) {
    this.delimiter = delimiter;
    }
    public void A() {
    System.out.println(this.delimiter);
    System.out.println("A");
    System.out.println("A");
    }
    public void B() {
    System.out.println(this.delimiter);
    System.out.println("B");
    System.out.println("B");
    }


    }

    Constructor(생성자)를 이용해 instance가 실행될 때 꼭 해줘야 하는 것들을 사용자가 까먹지 않도록 할 수 있다.

    class와 똑같은 이름의 method를 만들면 그게 바로 constructor이다.
    constructor는 static이나 void 등을 지정하지 않는다.

    this는 우리가 생성한 instance를 가리킨다.

    완료
  3. 임성운짱짱
    질문이 있습니다..
    5분 :32초에서 public String delimiter = "";
    public Print(String _delimiter) {
    delimiter = _delimiter; 를
    -------------------------------------------------------------------------------
    public String delimiter = "";
    public Print(String (1)delimiter) {
    (2) delimiter = (3)delimiter;
    로 바꿨습니다. 근데 여기서 바뀐부분이(변수이름이 똑같아서 일단 번호를 붙혀서 각자 다르게 부르겠습니다.)
    이해가 안가는게 있는데 1번 delimiter는 일단 인스턴스에서 매개변수를 받아서 ----입니다. 그다음
    2번delimiter는 = "" 입니다. 3번delimiter는 인스턴스에서 매개변수를 받아서 ----값을 가지고 있구요. 때문에 3번delimiter를 2번 delimiter에 대입하면
    ----이 출력되야되는거 아닌가요? 왜 공백이 나오죠..!?
  4. 싱와
    ** 코딩 초보인 나는 무식함을 인정하고 초기화부터 정리합니다 **

    초기화라는것은 어떤 일들을 시작하기 전에 하는 루틴같은겨.
    왜 야구선수 투수들이 등판하기 이전에 루틴으로 커피를 세잔 무조건 마셔야한다던지,
    잠은 왼쪽으로 그날은 자야한다던지.. 등판하기전에 무조건 해야하는 그런것들 있잖슈?..
    그런게 초기화다..

    그런것 처럼, 프로그램도 이것이 실행되기 이전에 무조건 실행되야하는 과정들이 있을 수 있단 말이야..
    그런데 자식이 부모마음 모르듯, 사용자들은 개발자들의 의도 그런거 몰라.. 야구선수 선발 루틴? 그런게 알게뭐야..
    그냥 쓰는거야. 그럼 어떻게 되겠어? 프로그램 에러나지. 그날 게임 진단 말이여.

    그.래.서.

    아싸리 이걸 그냥 강제시켜버리는겨. 사용자는 영문도 모르고 이거 해야한다니까 하는데, 왜하는지는 몰라.
    근데 강제로 시키니까 개발자 의도 정확하게 따라가버리고, 초기값도 그냥 셋팅되버리네? 오류가 줄어드네?
    엄마가 공부하라고 할때는 하기 싫었는데 하고나니까 엄마의 의도를 알아버렸네?!

    이러한 놈들을 "생성자, Constructor" 라고 한다. 이말입니다.
    요놈들은 인스턴스를 생성할때 원래 클래스에 클래스 이름하고 똑같은~ 이름을 가진 놈을 메소드로 만들어버리는거다.
    Public sangsungza() {} 이렇게..

    예를 하나 들어보자.

    내가 인스턴스를 하나 만들었는데, 요놈에 매개변수(파라미터)를 추가해서 특정 정수값이 무조건 들어가게 하고 싶네?

    원래 클래스 이름이 sangSungza 라고 한다면,

    Class sangSungza {
    int a ;
    public sangSungza(int a) {
    this.a = a;
    (후략)
    .
    }

    sangSungza foo = new sangSungza(1) {
    .
    .
    }


    이런식으로 초기에 1이라는 정수값을 지정해줄 수 있다는 사실~


    그래서, 정리해볼까?

    어떤 객체를 만들때, 그 객체가 반드시 해야할 일들이 있다면, 그것은 별도의 메소드로 만들어서 그 절차를 사용자가 일일히 숙지하는것이 아니라, 그냥 생성자에 그 절차를 포함시켜버려서 객체를 사용하는 사용자가 그 절차를 숙지하는 과정을 생략하고, 반드시 해야하는 일들을 놓치지 않게 함으로 오류를 줄이고 편의성을 증대시키는것이 생성자다!!
  5. 양미림
    public Print는 메소드가 아니라 생성자입니다! 보시면 클래스 이름이 print죠? 일반적으로 생성자는 클래스 이름이랑 동일하게 만듭니다 그래서 print 클래스의 print 생성자를 만든 거예요 메소드량 형태가 비슷하지만 메소드는 리턴 타입이 있고 생성자는 없습니다
    대화보기
    • 김민재
      궁금한게 있는데 Print클래스에 있는 public Print 메소드에는 return값이 없는데 void 안붙여도 상관없는건가요??
    • 선대범
      생성자는 클래스의 인스턴스인 객체를 생성시 인수를 입력하면 그 인수를 받아 어떤 특정한 기능을 하는 코드이다.

      생성자는 메소드를 만들듯이 만들면 되는데 이때 메소드의 이름을 해당 클래스의 이름과 같은 이름으로 그 클래스 내부에 만들면 그것은 생성자가 된다.


      a) 클래스 인스턴스명 = new 클래스명();
      b) 클래스 인스턴스명 = new 클래스명(인수);

      클래스 {
      클래스명() {

      }
      클래스명(파라미터) {

      }
      }

      a)처럼 () 안에 인수가 없으면 파라미터가 없는 생성자로 던져지고 {} 안의 내용을 실행한다. 사용자가 아무런 데이터도 입력하지 않은 경우를 대비한 생성자이다.

      b)처럼 ()안에 인수가 있다면 자료형과 인수의 갯수가 일치하는 파라미터가 있는 생성자로 던져지고 {} 안의 내용이 실행된다. 사용자가 특정한 데이터를 입력할 떄를 대비한 생성자이다.

      --------------------------------------------------------------------------------

      생성자의 파라미터명과 멤버변수명이 같을 경우가 많은데 이 때 초기화 시키는 방법이 this를 사용하는 것이다. this는 클래스의 멤버변수를 가르킨다.

      a) 클래스 인스턴스명 = new 클래스명();
      b) 클래스 인스턴스명 = new 클래스명(인수);

      클래스 {
      접근권한 자료형 멤버변수명= ...
      클래스명() {

      }
      클래스명(파라미터명[== 멤버변수명]) {
      this.멤버변수명 = 파라미터명;
      }
      }

      클래스의 인스턴스인 객체를 생성할 때 인수를 입력하면 그 값은 생성자의 파라미터로 넘어오고 그 파라미터는 해당 생성자의 지역변수가 되어서 멤버변수에 대입된다. 결과적으로 멤버변수의 값이 인수의 값으로 변경되는 것이다.
    • hyuna lee
      감사합니다.
    • 빽토리얼
      생성자는 인스턴스 초기화 시 매개변수를 필요로 한다면 class 내에서 같은 class 이름을 사용함으로써 지정 가능하다.
      (class Print{
      public Print(String s){ ... } )
      여기서 this. 키워드를 변수 앞에 붙여서 이 변수가 자신의 클래스 내에 있다는 것을 명시해준다.
    • 넘무
      생성자는 인스턴스를 사용할때 초기에 값을 주입할때 사용하고
      this는 인스턴스의 변수,메소드를 지칭할때 사용한다
      좋은 강의 감사합니다
    • 생성자는 초기에 지정해야 할 값이 있을때 public 클래스 이름동일 형식으로 만든다

      그리고 this는 클래스가 인스턴스화 될 때 인스턴스 변수 값을 지정함
    • jajavava
      생성자는 인스턴스를 생성할 때 초기에 셋팅할 값이 있는 경우에 만들고, 클래스의 이름과 동일한 메소드이다.
      (public만 붙여서 만듬)
      this는 클래스의 인스턴스 변수를 가르킬때 붙여준다.
    • 임위닝
      this에서 많이 헷갈려서 인터넷강의를 찾다가 들어오게되었습니다
      정말 감사합니다
    • 2020.03.15 완료
    • 감사합니다..
    • 라또마니
      감사합니다.
    • 쑤우
      수강완료. 감사합니다~
    • 제넷
      생성자와 this 개념이 모호했는데
      확실하게 정리되었네요! 감사합니다.
    • 허공
      감사합니다!
    graphittie 자세히 보기