Summary

  • Lotto구조체사용→외부변화에 취약→캡슐화→캡슐도구에 함수를 모음
  • 기존코드는 함수위주의 코딩. 예 : Lotto.sort(lotto);
  • 자바는 함수사용시 무조건 캡슐화를 해야한다. (클래스를 만들고 클래스안에서 함수를 만든다)
  • 반면 자바스크립트는 클래스없이 함수사용가능.
  • 개체: 구조적인 데이터형식
  • 객체: 개체의  실체, 인스턴스 
  • static메소드 :객체사용하지않음, 클래스이름.메소드이름으로 호출, 언제든지 호출가능,매개변수로 작업
  • 인스턴스메소드 : 객체를 생성후 호출, 객체이름.메소드이름으로 호출, 매개변수없음
  • 함수에서 사용하는 변수가 지역변수인지, this의 멤버변수인지, 전역변수(static)인지 구별할것

 

Object Oriented Programming

  • 객체지향 프로그래밍
  • 객체로부터 출발하는 프로그래밍
  • 객체를 중심에 두는 프로그래밍
  • what → how 
  • 주어,목적어가 우선 ( 행위의 주체가 눈에 띄도록한다)
  • 함수는 동사, 행위
  • lotto.gen(); : lotto를 gen()한다.

 

객체지향 적인 표현식으로 바뀐 함수

객체를 사용하는 함수 : Object function / Instance function / method

static과 매개변수를 지운다.

lotto.대신 this를 쓴다.

외부에서는 객체이름.함수이름()으로 호출

내부클래스에서는 this.가 lotto를 대신한다. → this생략가능Summary

Lotto구조체사용→외부변화에 취약→캡슐화→캡슐도구에 함수를 모음

기존코드는 함수위주의 코딩. 예 : Lotto.sort(lotto);

자바는 함수사용시 무조건 캡슐화를 해야한다. (클래스를 만들고 클래스안에서 함수를 만든다)

반면 자바스크립트는 클래스없이 함수사용가능.

 

 

객체지향 적인 표현식으로 바꾸기

객체를 사용하는 함수 : Object function / Instance function / method

static과 매개변수를 지운다.

lotto.대신 this를 쓴다.

외부에서는 객체이름.함수이름()으로 호출

내부클래스에서는 this.가 lotto를 대신한다. → this생략가능 

라디오의 높이, 라디오의 길이를 말하지않고 라디오라고 말하는 것처럼, 그룹핑해서 쓴다. →표현하는 단위가 됨

                                                .

 

this

인스턴스 함수가 넘겨받는 객체를 참조하는 변수

size는 함수내에서 선언되지 않았다.

size를 전역변수라고 잘못 이해하는 경우가 있다.

Lotto클래스의 private int[] nums;와 private int size는 설계도일뿐이다.

this.size에 값이 대입된것이다.

lotto객체외에 lotto1객체를 또 생성하면 

lotto.nums[i] , lotto.size와 lotto1.nums[i], lotto1.size 에 각각 값이 담기게된다.

 

static 메소드 : 객체를 쓰지않는다. 매개변수로만 넘겨받는다. '클래스이름.메서드이름'으로 호출한다.

인스턴스메소드 : 객체를 넘겨받는 메소드, 객체메소드, 실체메소드, 객체생성 후 사용가능.

 

Getter / Setter

사용자입장에서 생각하기.

main()함수가 있는 Program클래스는 외부이다.(사용자입장)

Lotto{}클래스는 데이터와 데이터에 관련된 메서드의 집합, 제공자입장이다.

main()메소드에서 lotto.getSize()를 호출하면 : lotto에 있는 숫자를 불러와줘.

main()메소드에서 lotto.setSize(6)를 호출하면 : size에 6을 넣어줘.

setSize{ this.size = size(지역변수) } this생략하면 지역변수를 지역변수에넣게된다. 

지역변수size를 this.size에 대입한다.

 

캡슐화

기존 캡슐화 : 데이터변화에 영향을 받는것들을 한곳에 모아 둔것

객체지향 캡슐화 : 객체가 갖고있는 서비스들, 즉 객체가 제공해야할 서비스들을 모아둔것

객체를 행위자로 만드는 작업이다.

Print()함수의 재사용

콘솔출력을 위한 클래스를 만들고 Program클래스에서 LottoConsole.print(lotto)를 호출해서 출력하게한다.

static함수로 만들어 언제든지 호출할 수있게한다. 

static함수는 인자를 전달받으므로 public static void print(Lotto lotto)로 매개변수를 넣어준다.

 


생성자(Constructor)

클래스명(){ }

생성자는 함수명이없지만 객체형식을 클래스형식으로 한정한다는 것을 의미.

반환값X, 매개변수O, 오버로드O

생성자를 사용하는 이유 ?

초기화는 단 한번만 실행되어야한다.

초기화는 다른 어떤 로직보다 먼저 실행 되야한다.

 

기존코드의 문제점:

일반함수였을땐느 init()함수가 한번만 실행 되지 않았고, 먼저 실행되도록 하지 못했다.

lotto.gen();을 언제든지 사용할 수있으며, 무조건 먼저 실행되도록 제어할수 없었다.

 

해결:

Lotto lotto = new Lotto();

객체를 생성할때 자동으로 호출되는 '인스턴스 초기화 메서드'.

 

좌: 객체지향 / 우: 언어의 특성

+ Recent posts