spring Boot

spring boot) 자바 기본 문법 2 (class, constructor)

연습노트 2024. 9. 9. 23:54

class가 뭐냐면

 

자바로 코드짤 때 class를 많이 보게 될텐데 class에 대해 알아봅시다.

이거 설명할 때 붕어빵 틀이니 상속이니 뭐니 하면서 어렵게 설명하는 사람들이 있는데

그딴거 필요없고 class가 뭐냐면 그냥 변수와 함수 보관하는 통입니다.

 

 

 

class Test {
  String name = "kim";
  void hello(){ System.out.println("안녕");  }
}

class 만들려면 class 작명 { } 하면 됩니다.

- 중괄호 안에 변수나 함수를 맘대로 여러개 보관해둘 수 있습니다.

- 참고로 System.out.println 쓰기 귀찮으면 sout라고 쓰고 엔터누르면 자동완성됩니다. 

- 보관했던 변수와 함수를 자유롭게 가져다쓸 수도 있습니다.

 

 

 

 

 

class에 있던 변수 함수 사용하려면

 

class에 보관해뒀던 변수랑 함수를 쓰고 싶으면 class의 복사본부터 만들어야합니다.

 

 

var test = new Test();

new 클래스() 라고 쓰면 클래스에 있던 변수랑 함수 복사해주세요~ 라는 뜻입니다.

그러면 진짜로 클래스에 있던 변수랑 함수를 복사해온 이상한 자료가 그 자리에 남습니다.

참고로 변수랑 함수 복사본 담고있는 이상한 자료를 멋있게 object라고 부릅니다.

 

 

var test = new Test();
System.out.println(test.name);

object 안에 저장된 변수랑 함수를 가져다쓰고 싶으면 

점찍어서 변수나 함수 꺼내서 쓰면 됩니다.

그래서 .name 붙이면 이 자리에 아까 Test 클래스에 보관해놨던 kim이라는 변수가 남는 것임

test.hello() 처럼 그 안에 있던 함수도 사용할 수 있습니다.

진짜 되나 main 함수 안에서 실행해보십쇼

 

 

 

Test test = new Test(); 

클래스를 복사해올 때 타입을 정확히 넣고 싶으면 뭘넣어야하냐면

타입자리에 클래스명 넣으면 됩니다. 

클래스도 일종의 자료형 역할을 할 수 있어서 그런 것임

 

 

정리를 하자면 

1. 클래스 쓰면 변수랑 함수들을 보관해둘 수 있음

2. 보관해둔 변수나 함수 쓰려면 new 클래스(); 로 클래스 복사본을 하나 만들어서 점찍어서 꺼내써야함

3. new 키워드로 뽑은 클래스 복사본을 object라고 멋있게 부름

 

 

 

 

 

class 쓰는 이유

 

근데 여러분들 문법 배우는게 중요한게 아니라

이걸 왜 쓰는지 배워야 나중에 활용을 할 수 있습니다.

 

그냥 변수 아무데나 만들어서 쓰면 되는데

왜 귀찮게 클래스 따로 만들어서 변수함수를 보관해두고 복사해서 가져다가 쓰냐고요? 

이유는 3개 정도 있습니다.

 

 

1. 자바를 선택한 이상 자바에선 항상 코딩을 클래스부터 써놓고 시작하기 때문에 어쩔 수 없이 강제로 써야함

 

2. 관련있는 변수, 함수를 한 곳에 보관할 수 있으니까 코드 정리해두기 좋음

 

3. 중요한 변수, 함수 원본을 안전하게 보관할 수 있음

- 님들 중요한 서류 수정할 때 원본을 직접 수정합니까

원본을 직접 수정하고 그러면 좀 위험할 수 있어서 보통은 복사한 다음에 그걸 가져다가 쓰는게 안전합니다.

class도 마찬가지로 변수, 함수 원본을 보관해두고 

이걸 new 키워드로 복사해서 쓰면 원본 데이터를 안전하게 그대로 지킬 수 있으니까 그래서 쓰는 것입니다.

 

그래서 이런 장점들 때문에 class를 쓰는 개짓거리를 하는데

실은 장점들이 몇개 더 있습니다. 그건 나중에 코드짤 때 체감해봅시다.

 

 

 

(참고1)

클래스안에는 복사안되는 변수도 만들 수 있고 

복사안해도 쓸 수 있는 변수도 만들 수 있고 

그럴 수도 있습니다. 

static private 같은 여러 키워드들 쓰면 되는건데 나중에 알아봅시다.

 

(참고2)

object를 다른 말로 인스턴스라고 부르기도합니다. 

클래스 안에 있는 변수는 field / attribute 라고 부르기도 하고

클래스 안에 있는 함수는 method라고 부르기도 합니다.

있어보이는 척 할 때 써보도록 합시다.

 

 

 

 

 

 

constructor 문법

 

이번엔 constructor 문법을 배워볼건데 그냥 배우면 재미가 없으니까 상황을 한번 가정해봅시다. 

다들 친구 한 명은 있을텐데 친구없으면 이번 기회에 가짜로 하나 만드시고요

 

Q. 내 친구 한 명의 이름과 나이를 변수로 저장해놓고 싶으면 어떻게 하죠?

친구의 이름, 나이 저장할 변수 2개를 만들면 될 것 같은데

클래스 배운 사람들이니까 클래스 하나 만들어서 거기 안에 넣어보도록 합시다. 

 

 

class Friend {
  String name = "kim";
  int age = 20;
} 

Friend라고 클래스 하나 만들어서 이름, 나이를 보관해봤습니다.

그럼 앞으로 이 친구의 나이가 필요하면 어떻게 합니까 

new Friend()로 object 뽑아서 쓰면 되겠네요. 심심하면 뽑아서 출력해봅시다.

 

Q. 근데 이번엔 친구가 한 명 더 생겼습니다.

그 친구는 나이는 똑같은데 이름이 "park"입니다. 

그 친구도 클래스 하나 만들어서 이름, 나이 저장해두고 싶으면 어떻게 하죠?

 

 

 

 

class Friend1 {
  String name = "park";
  int age = 20;
} 

클래스 하나 더 만들어서 이러면 됩니다.

 

Q. 근데 이번에 또 다른 이름의 친구가 또 생기면 어쩔 것임?

- 실은 비슷한 클래스는 굳이 여러개 만들 필요가 없습니다. 

클래스에서 쓸 수 있는 constructor와 파라미터문법을 쓰면

object 뽑을 때 마다 매번 다른 변수값을 가지도록 클래스를 만들 수 있습니다. 

 

 

class Friend {
  String name = "kim";
  int age = 20;
  Friend(){
    this.name = "어쩌구";
  }
} 

여기 class 안에다가 클래스랑 똑같은 이름의 함수( ){ }를 하나 만들어봅시다.

그러면 이건 슈퍼 울트라 스페셜한 함수가 되는데

이 함수는 object를 하나 만들 때 자동으로 실행됩니다.

 

이 스페셜함수안에는 신기한 this라는 키워드도 쓸 수 있습니다.

this는 새로 생성될 object를 뜻합니다.

this.name = “어쩌구”

그래서 this를 활용하면 이런 식으로 name 변수의 초깃값을 맘대로 설정해줄 수도 있습니다.

위 코드는 그래서 새로 생성될 object의 name 변수에 "어쩌구" 넣으라는 소리입니다.

 

Q. 뭔가 문법을 배웠으면 이걸 왜 쓰는지 생각해봐야 나중에 활용이 가능합니다. 이거 왜 쓰는 것임?

- 이거 스페셜한 함수랑 this문법을 잘 쓰면

object를 뽑을 때 마다 매번 다른 값을 변수에 집어넣어서 뽑을 수도 있습니다.

그니까 뽑을 때 마다 name변수에 "kim"도 넣고 "park"도 자유롭게 넣어서 뽑을 수 있음 

 

 

 

 

class Friend {
  String name = "kim";
  int age = 20;
  Friend(String 이름){
    this.name = 이름;
  }
} 

어떻게 하냐면 매번 가변적으로 설정할 부분에다가 파라미터를 추가해보면 되겠습니다.

저는 이름이라는 파라미터를 뚫어봤습니다.

파라미터도 일종의 변수라서 왼쪽에 타입도 집어넣어야함

 

 

 

var friend1 = new Friend("kim");
var friend2 = new Friend("park")

이런 짓을 해두면 이제 new Friend() 으로 object 뽑을 때

이 때 소괄호 안에 원하는 값을 집어넣어서 뽑을 수 있습니다.

예를 들어서 “park” 이렇게 집어넣어볼 수 있는겁니다.

그럼 파라미터자리에 뿅 박혀서 뽑힙니다.

 

Q. 그래서 위에 있는 변수 2개에 있던 name을 출력해봅시다. 뭐나오게요

Q. 그럼 name이 "lee"인 친구를 한명 만들고 싶으면 어떻게 코드짜야합니까

 

 

(참고1)

this는 생략해도 됩니다.

this없어도 그냥 this 생략되었겠거니 하면서 컴퓨터가 알아서 채워주고요 

 

(참고2)

파라미터는 원하는 만큼 많이 만들 수 있습니다.

 

(참고3)

슈퍼 울트라 스페셜 함수를 개발자 말로 constructor라고 부릅니다.

 

 

 

 

 

 

 

객체지향 프로그래밍

 

class와 object를 많이 활용해서 개짓거리 하는걸 객체지향 프로그래밍이라고 부르기도 하는데

그래서 자바로 코드짠다고해서 객체지향에 대해서 많은걸 배워오려고 하는 분들이 있는데

객체지향 문법은 길고 복잡한 코드 정리도구, 관리도구일 뿐입니다.

초보 때는 관리할 코드도 없는데 관리법부터 배우면서 시간낭비할 필요가 없습니다.

 

(1) class 만들고

(2) object 뽑는거

(3) constructor 쓰는거

이 정도만 알고 있으면 개발하는데 전혀 문제없습니다.

스프링 부트는 특히나 코드 창조할 일 보다 코드 배치하는 일이 더 많아서 이런거 몰라도 코드짤 수 있는 정도입니다.

 

 

 

 

 

 

배운거 정리

 

1. 클래스는 변수 함수 보관함임

 

2. 클래스에 있던 변수함수를 사용하고 싶으면 new 클래스()로 object를 뽑으면 됩니다.

그럼 클래스 안에 들어있던 변수 함수가 object로 복사됩니다.

 

3. object 뽑을 때마다 각각 다른 변수값을 부여하고 싶으면 constructor를 만들면 됩니다.

클래스이름( ){ } 으로 함수만들면 그게 constructor임

그 안에 있는 코드는 object 뽑을 때 자동실행되므로 this 같은거 써서 변수의 초깃값을 맘대로 설정할 수도 있습니다.

심지어 함수 파라미터 문법도 사용가능

 

4. field, attribute, method, instance라는 용어 배움

 

1~2번은 자주 사용할 것이기 때문에 죽고싶지 않으면 이 정도는 외워둡시다.