자바의 정석 스터디(2) - 객체지향

Jay_u·2023년 8월 19일
0

스터디

목록 보기
2/5

절차지향 프로그램

순차적으로 실행되는 프로그램, 소스코드가 순차적으로 연결
하나라도 제대로 작동하지 않으면 와르르 무너짐

객체지향 프로그램

절차지향의 단점을 보완, 세상의 사물을 하나의 객체로 만들어 상호간의 소통하면서
프로그래밍이 진행


대가리(기존 상식을) 깨는 시간

클래스는 타입이다. 내가 만들어낸 클래스로 누군가가 쓰길 원하는 것이다.
우리는 게시판질을 할꺼다

글목록 > 글
글은 오브젝트(객체)일까? 글을 읽기 위해서 db에서 데이터를 가져와야 한다.
즉, 객체 = 데이터이다.
CRUD 기능과 데이터를 넣은 것을 객체라고 한다.
그리고 이 객체는 남들이 쓸 수 있게 만들어주는 타입과 맞닿아 있다.

  • a
    도메인 관점에서 찢어지는게 msa가 아니라
    기술적 관점에서 찢어야 한다.

절차지향과 객체지향의 차이점이 있을까?
아니다 객체지향도 컨트롤러의 요청을 받는데? 이게 다른걸까?
아니 있다. 객체지향은 그 자체만으로도 api를 제공한다.
절차지향은 api를 제공할 수 없다. 메소드 하나가 수천 수만라인인데
이런게 한번에 쭉 도는 거다.. 절대 못읽는다.

객체지향이라는 것은 타입이다 객체는 클래스다 객체는 타입이다.
게시판질 입장에서는 게시글 한줄이 객체다.
이걸 컬렉션으로 묶어놓으면 게시판이 되는 거고

그 객체 하나는 데이터이다. 객체는 데이터를 물고 CRUD 기능을 갖고 있어야 한다.


클래스 변수

static을 붙인 경우 클래스의 인스턴스가 없더라도 변수를 사용할 수 있다.
클래스.변수

ex)카드의 폭과 길이

인스턴스 변수

클래스의 인스턴스가 가지고 있는 변수
각각의 인스턴스는 독리접으로 가지고 있다.

ex) 포커 카드의 스페이드, 하트, 숫자 등

지역 변수

메소드 내에서 가지고 있는 변수


객체 생성 방법


public Class Card {
	static int width;
    static int heigh;
    
    String cardMark;
    
    public Card() {
    }
    
    public setCardMark(String mark) {
    this.CardMark = mark;
    |
}

클래스 참조변수 = new 생성자();
Card card = new Card();

대가리 깨는 시간

클래스는 타입이다.
메소드가 리턴하지 않으면 void?
게신판쟁이는 무조건 리턴해야한다. void를 쓴다는 것은 널 개무시한다는 거다.

메소드를 호출했을 때는 값은? 타입=클래스이다.
클래스를 인스턴스화한 객체, 객체를 영어로 오브젝트 오브젝트는 데이터다.

new란 힙 메모리에 저장하는 것도 맞다.
그런데? 자바 컴파일러는 new를 만나면 타입을 호출하는 생성자를 찾는다.
클래스는 타입이다. 최초에 메모리에 올려주는 역할을 하는게 new이다.
new는 생성자를 찾는다.
똑같은 이름의 함수와 똑같은 이름의 클래스가 존재한다. 바로 생성자이다.

스프링은 new가 없다. 스프링은 다 올려놓는다. 이 역할을 context가 해준다. @Autowired 이 자식이 다 해준다.

미리 하나 만들어서 더 이상 생성하지 못하도록 만든것 이게 싱글톤 패턴이라고 한다. ㅋㅋ new가 없는 패턴이다.

우리가 자동으로 박아줄게 이게 바로 DI이다.

nosql은 테이블을 안써서? sql을 안써서 nosql이 아니다.
정해진 형태나 타입이 없고 그냥 때려 박을 수 있는게 비정형
String으로 쭉 던지는데 이제 뽑을때가 고민인 것이다.


this 는 자신을 가리키는 참조변수

this()는 다른 생성자를 호출할 때 사용
생성자 내부에서 사용, 생성자 첫 줄에 위치해야 한다.

=> 이게 뭔소릴까?
생성자는 결국 메소드이다. this()를 호출할 때 파라미터를 넣을 수도 안넣을 수도 있다.
생성자(메소드)를 호출할 때 파라미터 개수가 달라지듯이(오버로딩)

그래서 this()를 호출하면 이자식은 클래스 내부에 다양한 생성자 중 파라미터 타입이나 개수가 맞는 (오버로딩) 생성자를 찾아 호출한다. <= 이 방법 자주 쓰면 망함 자기 자신을 복제하는 방향임

템플릿 메소드 패턴
생성하는 사람이 몇가지만 제공하면 나머지는 알아서 넣어줘

this() 도 그렇다. 만약 생성자를 Car(String color, String gearType, int door)만 있다치는데 나는 문짝 개수가 없다면?
this()를 활용해서 색이랑 기어타입만 넣어주는 것이다.

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글