2024. 10. 6. 17:55ㆍjava/에 대하여
내가 java를 얼마나 알고있나? 이것은 순전히 내 머리 속을 정리하기 위한 작성이다.
불친절하고 부정확할 수 있다. java에 대해 내가 아는 바를 포석처럼 나열한다.
이번엔 이름 앞에 붙던 각종 keywords들을 알아보자.
java를 갈길 때, 저 앞에 있는 알 수 없는 keyword는 대체 무엇일까? 왜 하는 걸까? 무언가 뜻이 있나?
그렇다!
시사하는 바가 있다. 이제 한번 갈겨보자.
access modifier
접근제어자는 해당 keyword가 붙어있는 대상에 대한 접근을 제어한다.
class나 method, variable의 앞에 붙어있는 것을 이미 보았을 것이다.
- public: 은 모든 class에서든, 어디서든 해당하는 대상에 접근가능하다는 의미.
- private: 은 같은 class에서만 해당하는 대상에 접근 가능하다는 의미. 다른 class에서는 직접적인 접근이 불가하다.
- default: 로써 제어자를 생략할 시에는 같은 package 내에서만 접근가능하다.
- protected: 는 같은 package나 상속하는 sub class에서만 접근가능하다.
다른 keywords들을 뭐라 지칭할지 모르겠다.
static
- static: java에서의 static은 해당하는 대상에 따라 조금 다르게 작동한다.
- static var: 변수에서의 static은 class 단위에서 존재한다. 해당 class의 모든 instance가 공유한다. static var가 존재하는 한 class로 두 개의 객체를 만든다면, 그리고 한 객체에서 static var를 수정해도 두 객체는 static var는 같은 값이다.
- static class: 는 특별할 것이 없다. 원래는 우리가 생성자를 활용해 Obj obj = new Obj();로써 객체를 생성해야 해당 class를 사용할 수 있다. 하지만 static class는 그 과정없이 memory에 상주한다고 생각하면 편하다. main method 앞에 static이 붙어있던 것을 생각해봐도 좋을 것이다.
public static void main(String args[]){}
을 보자. static이 붙어있다. 그리고 우리가 main의 객체를 생성한 적이 있던가?
return type!
public int main(){}
, public static void main(String args[]){}
들을 떠올려보자. method 앞에 자료형이 써있다.
이것은 해당 method가 해당하는 자료형의 값을 반환 받아야 함을 의미한다. 뒤에 붙은 괄호와 같이 확인해보자.
public int calc(int a, int b){
...
int result = a + b;
return result;
}
다시 허접한 a + b이다.
Calc 앞의 int는 해당 method가 int값을 반환해야만 함을 명시한다. calc를 호출한 곳에서는 result에 할당된 값을 반환받아서 유용하게 사용할 것이다.
어떤 관점에서 보면, int형 변수라고 취급 할 수도 있을 것이다. 객체를 생성한 곳에서는 int calc = 42 같은 느낌으로 사용되니까 말이다. 물론 정확한 표현은 아니다. 그냥 그런 vibe라는 말이지.
(int a, int b)는 해당 method가 int 두 개까지 parameter로 받을 수 있음을 명시한다.
interface, impliments
interface부터 이미 아뜩하니 하마타면 까무러칠 뻔했다. 이미 이것은 keywords에 대한 설명이 아닌 것만 같다.
interface는 abstract class로만 이루어진 class이다. 기본적으로 설계도의 역할, logic에 접근하는 역할, 다형성을, 다중상속을 사용할 수 있게하는 수단이다.
설계도로써의 역할부터 알아보자. interface에 연결되는 classes들이 있다.
public interface it{
public void service();
}
public class itImple impliments it {
public void service(){
...
}
}
public class itImple2 impliments it {
public int service(){
...
}
public void dog(){
...
}
}
check this out.
it는 interface이다.
itimple과 itimple2는 it를 구현하는 역할이다. 일반적으로 inerface의 이름 뒤에 +Imple을 추가하는 식의 작명을 한다.
우선 it가 두 구현 classes에게 service라는 이름의 method를 강요한다고 생각하자.
구현 class는 interface에게 해당하는 항목들을 제공해야만만 한다.
public interface it{
public void service();
}
public interface it2{
public void dog();
}
public class itImple impliments it, it2 {
public void service(){
...
}
public void dog(){
...
}
}
이번엔 여러 interfaces에 하나의 class이다.
해당 클래스는 두 interfaces에서 요구하는 methods를 모두 구현하고있다.
눈치 챘는가?
바로 하나의 class로 여러 접근을 쳐낼 수 있다는 것이다.
class는 다중상속이 되어 다시 돌아왔다.
class의 목표는 각 interface의 작동에 따른 service와 bark의 실행...
Dasvidaniya!
이번에도 주제를 알 수 없는 글이 되어버렸다. 다들 어떻게 책 처럼 쓰는지 모르겠네.
keyword가 아니라 interface에 대한 설명이 가장 중요한 내용이 되어버렸다.
정말 중구난방의 생각 정리이다. 이런건 옵시디언에서 하는 편이 좋을텐데말이다.
아무래도 여기서 interface와 abstaract에 대한 기술을 더 자세히 해는 편이 좋을 것 같다.
'java > 에 대하여' 카테고리의 다른 글
java에 대해 처음부터 생각해보기-1 (캡슐화) (2) | 2024.10.06 |
---|