코린이임. 취미 비스므리하게 컴터 만지는거 좋아해서 이것저것 해보고 있당. 요새 자바가 또 그렇게 땡김. ㅋㅋ
어쨌든 자바에서 궁금한게 있는데
에서 다른건 static 저거 하난데 저 static이 무슨 의미가 있길래 됐다가 안됐다가 하는거임?
아 그리고 또 이런식으로 하나 뽑아다가 하면 또 static 이 없어도 되던데
위에껀 다른 메서드를 땡겨 쓰려면 = (공유하려면) static이 있어야 돼서 그런거고
밑에꺼는 main 메서드에 chk 라는 걸 이미 땡겨 쓴 부분이기 때문에 공유를 하기 위한 static이 없어도 되는거임?
11개의 댓글
무분별한 사용은 차단될 수 있습니다.
둥근종이컵
static 이란게 변수, 메소드, 클래스 같은걸 new 메소드로 메모리에 올리는 방법이 아니라 프로그램 실행과 동시에 메모리에 올리는 방시식임 그래서 두번째 캡쳐의 방식으로는 아직 sum 메소드가 메모리에 올라가 있지 않아서 컴파일 에러가 뜨는것
fawekfks
static이 붙은 애들은 실행하면서 메모리로 올라가서 어디든지 땡겨서 쓸 수 있고
안 붙은 애들은 숨겨져 있다가 new로 땡겨와서 메모리에 올려져서 3번째 사진처럼 쓸 수 있다 인거임?
그럼 죄다 static 붙이면 메모리 손해보고 그런건 좀 있음?
둥근종이컵
ㅇㅇ 3번째 사진 처럼 쓸 수 있음 죄다 static 를 붙으면 C랑 다를게 없을걸? 자바에서 ?! 굳이!
그리고 static 은 실행한 프로그램이 종료될때까지 메모리에 상주해 이건 좋지 않음
fawekfks
아 그래서 뭔 메모리 누수니 닫아야 한다느니 그런 이야기를 했던거구나..
룰루루룽
한번쓰고 버릴걸 static 붙일 이유도 없고
...상황에 맞춰서
fawekfks
그냥 혼자 공부하는데 궁금했어 ㅋㅋㅋㅋ
static 붙였는데 되고 떼니까 안되고 객체 뽑으니까 되고 하니까 ㅋㅋ
대뇌
위에 애 말대로고, 관련해서 컴파일타임/런타임 찾아보면 좋음
덧붙여 main 함수에 public "static" void 를 관용적으로 붙이는 이유가
최초 실행시 main 함수를 메모리에 올려서 호출하기 위함임
모두 static 쓰면 메모리적으로 손해보는 이유는 자바 프로그램에는 가비지 컬렉터라는 애가
내부에서 뽈뽈 돌아다니면서 주기적으로 안쓰는 데이터를 수거해서 메모리를 확보하는데
static 은 메모리에 올라가면 언제 누가 어떻게 쓸지 모르므로 수거가 잘안됨
수거가 안되는 안쓰는 데이터가 많으면? 메모리 누수임.
그래서 실무에선 귀찮더라도 밑에 그림처럼 인스턴스를 생성(new)해서 사용하는거임
관련해선 JVM과 OOP를 찾아보면 좋음
fawekfks
뭔가 엄청 전공같은 느낌이 든다.
그러면 static 을 붙여서 쓰는 경우는 아예 없는거임?
인스턴스 생성 -> 메모리 올라가고 -> 참조 -> 쓰는거 보단 올라가있는 상태 -> 참조 가 더 빠르지 않나?
아 또 그런건 아닌가 ㅋㅋㅋㅋㅋㅋ
초보자도 고려해야 할 만큼 엄청 중요한 부분임?
대뇌
당연히 있음 누구나가 똑같이 가져다 쓰고 변치 않는 값에서 자주 쓰임 = 상수라고 함
예를들어 pie값은 누가 뭐래도 3.14 고 절대 안바뀜
그럴때 final static float PIE = 3.14f 머 이런식으로 쓸 수 있음
static 성질을 이용한 싱글턴이라는 디자인패턴도 있고
유틸 클래스에서 사용하기두 함
예를들어 java.lang.Math 클래스는 전부 static 메소드임 아래 링크 봐보셈
https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#abs-double-
당장 너가 쓴 System.out.print에서 out 도 System 클래스의 static 필드임
대뇌
new 로 인스턴스 새로 만들어서 지지고 복고 하는게 OOP 이고
OOP 는 JAVA 프로그래밍의 핵심을 관통하는 아주 중요한 개념임
근데 취미라면 static 으로 만들고 싶은거 다 만들고
나중에 많은 프로그래밍 지식을 얻었을 때
와 ㅅㅂ 예전에 왜 이렇게 병신같이 코드 짰지 하고 느끼는 것도 재밌긴 할거임
fawekfks
억 ㅋㅋㅋㅋㅋㅋ 땡큐
그 순간 왔으면 좋겠다
좋은 키워드 고맙다