이번 포스팅은 클래스에 대해서 설명하겠습니다!
클래스는 변수나 메소드를 재사용할때 사용하는 수단입니다!
자 그럼 클래스를 에 대해서 먼저 예시를 보여드릴께요!
자 먼저 class 를 생성을 해줍니다!
그리고 그 밑에 클래스를 만드는 과정에서 this라는 글자가 있죠? 이건 받아온 name이란 String을 나의 객체, 본인의 클래스 Student의 name에 넣는다 라는 뜻으로 this 를 사용합니다!
이렇게 객체를 만들어주고
main에서 new(새로운 클래스)를 만들어 주고 그안에 넣은 값이 Student 클래스에 a 라는 변수에 들어간것이죠!
그래서 클래스 변수 a 에서 name, age, grade의 값이 다 들어가 있는겁니다!
그럼 클래스에 대해서 몇가지 더 알아보면
- 클래스를 선언할때 그 안에 변수가 없다면 컴파일러가 알아서 기본 생성자를 만들어준다.
- 반대로 정의된 생성자가 있다면 자동으로 만들어 주지 않는다.
- 1,2번을 동시에 사용하고 싶다면 오버로딩으로 설정해주면 된다!
자 그럼 클래스를 사용하는 이유가 변수나 매소드를 재사용할 때 사용하는 수단이라고 하였는데 그렇다면 메소드와 클래스의 차이점은 뭘까요????
바로 클래스는 return type을 쓸 수 가 없습니다! ——> 컴퓨터구조적으로 보았을 때 이미 이 class를 return하는데 주소값을 써야하는 것으로 정해져 있기 때문에!! return을 사용하실 수 없습니다
이렇게 해주면!
이런식으로 Student b를 만드는데 문제가 없죠!
자 그런데 예시를 보셨다 시피 저렇게 하나하나 변수를 지정해서 프린트 해야 하는 것 너무 힘들고 귀찮지 않을까요??
그래서 우리는 toString이라는 메소드를 만들어 줄껍니다! 어디에?? Student 라는 class에
예시)
자 이렇게 toString()메소드를 임의로 만들어서 사용을 하면
메인에서 코드 한줄로 이렇게 깔끔하게 표현이 가능하다는 거죠!!
자 이번에는 제가 학교 과제를 진행 하면서 에러가 떠서 이게뭐지…? 했던것을 알려드릴까 합니다
자 이렇게 static으로 선언된 변수가 class안에 있다고 하고
각각의 학교 이름을 선언을 해주고 값을 넣어줬는데 하나는 고려대 하나는 연세대가 떠야하는데 둘다 연세대가 떳죠??
이유가 뭘까요??
static 변수는 이 Student 안에 있는 모든 class가 공유하는 변수가 되기 때문입니다!!
그래서 처음 넣은 값이 지워지고 나중에 넣은 값이 넣어진것이죠!!
한국말로 찾아보니 정적변수 = static 이더라구요! 그래서 사용 하실때 주의 하셔야 합니다!
같은 이유로 메소드를 static으로 선언을 해주게 되면!
각각의 클래스로 사용하는것이 아닌 클래스 이름으로 메소드를 사용해주는 것이 더 쉽고 간단하겠죠?
그래서 static 변수의 더 자세하게 설명하자면
- 객체끼리의 값을 공유한다
So, 모든 객체가 동일하게 사용 될때 사용한다.
Static 메소드
1. 객체와는 상관없이 메소드를 사용한다.
So, 이 메소드는 메소드 안에서 인스턴스 변수사용이 불가능하다!
but, static 변수는 사용이 가능하다!
그래서 Static 메소드를 사용 할 때네는 인트턴스 변수를 사용할때에는 비효율적이다!
라고 생각해주시면 좋겠습니다
인스턴스 변수란 메소드 안에서만 사용되고 마는 변수를 뜻합니다!
자 Static에 대해서 배워 보았으니 다른 변수들에 대해서도 알아 보도록 하겠습니다
Private
Public
Protected
Default(저번 반복문과 마찬가지로 정해지지 않으면 자동으로)
이러한 단어들을 변수를 지정할 때 본적이 있으신가요??
이러한 것들을 접근지정자 라고 불립니다!
하나 하나 설명 해보겠습니다!
private 변수는 그 클래스 안에서만 활용되는 변수라고 보시면 되겠습니다!
그래서 다른 클래스나 패키지로 부터 사용이 불가하죠! 딱 그 클래스만 사용이 가능합니다
public은 말그대로 공용입니다 이 변수나 메소드는 같은 클래스나 같은 패키지 뿐만 아니라 다른 패키지, 상속된 자식 클래스에서도 사용이 가능 합니다!
protected는 보호받는 다는 뜻을 가지고 있죠! 이 변수나 메소드는 관련된 모든 곳에서는 사용이 가능합니다!
(이 지정자는 상속class를 사용할때 많이 사용합니다!)
default는 public과 비슷한 느낌을 주지만 다른 패키지에서는 사용 할 수 없습니다!
제가 간단하게 표로 만들었습니다!
'프로그래밍 > 자바' 카테고리의 다른 글
자바 상속 (0) | 2021.11.16 |
---|---|
자바 클래스와 배열 (0) | 2021.11.16 |
자바 메소드 (0) | 2021.11.10 |
자바 반복문 2 (0) | 2021.11.10 |
자바 조건문 반복문 (0) | 2021.11.10 |