본문 바로가기
카테고리 없음

변수 선언과 지정에서 순서의 중요성(필드화 시킨 변수(멤버변수) 위치, static 사용 예시) [20220707 til]

by 날파리1 2022. 7. 7.

혹시 알기전 간단 개념 정리

Java 변수 멤버변수 지역변수 필드화 

혹시 이 글 읽으시는데 문제없도록 (왜냐면 내가 아무용어 모를때 이런 글읽으려니 무슨 ㅆ소리인가 싶더라 ...하 )

자바에는 당연히 변수가 있다. 다들 변하는 수, 변하는 값 정도로 알고 있을 건데 정확한 정의를 알아야한다.

1. 변수 컴퓨터가 데이터를 저장하려고 메모리에 할당하는 공간

한 마디로 우리가 정해준 데이터 값 넣으려고 공간 만든다 이 말씀 -> 거기에 넣은 데이터 바꾸면 재할당이겟지? 새로 new 해주면 새로운 또다른 변수 생성이고.

 

2. 멤버변수 필드화시킨 변수들(클래스 명 바로 밑에 private (타입명) 변수명;)  = new 객체명 으로 객체도 생성해줄수 잇음

이렇게 변수를 클래스 밑에 선언해서 멤버변수로만들면 각 클래스의 모든 메소드 등에서 접근이 가능하다. 

 

3. 지역변수 그 지역안에서 생성되고 끝나면 소멸되는 변수

예는 우리가 정의한 메소드나 조건문등 특정 지역에서 사용하면 거기서만 적용되고 사라지는 함수 , 그렇게 하기 싫고 다른곳에서도 받아쓰고 싶으면 필드화 시켜서 멤버변수로 만들어줘야한다. ( 그리고 앞에 선언할때 쓰는 타입은 지우고 클래스에서 써줘야함)

 

4. static 프로그램 시작시 가비지 컬렉터 아니고 메모리에 바로 할당되는 함수, 따라서 메모리를 전체가 공유해서 클래스 지역 관계없이 어디서나 가져와서 쓸수 있다( 대신 남용하면 메모리 낭비 + 객체 지향성 손상)  즉 저걸 쓰면 선언하는 위치 공간 상관없이 어디서나 쓸수잇다는게 포인트

 

public static void main(String[] args) 쓰는 이유

다른 나머지 것들은 제외하고 스태틱 입장에서만 설명하면 일단 프로그램을 명령어를 입력해 시작이라고 시키려면 시작점이 필요한데 우리가 평소 쓰는 클래스니 뭐니 하는 것들은 결국 다 메인에 의존한 관계이다. 따라서 혼자 시작이 안된다. 근데 static 쓰면 메모리에 바로 할당되서 프로그램 종료까지 계속존재하므로 어떤 점 하나는 찍을 수있다(아무런 코드 정의가 없더라도) 그래서 저것을 써줘야 그다음부터 밑에 다른 메소드를 정의하든 클래스를 정의하든 시작할 수 있다. main 쓰는건 자바 규칙이라고 한다.

 

 

 

 

 

오늘도....필드화....

관심사의 분리라는 것은 결국 어떤 목적을 가지고 관심사끼리 분리하느냐의 문제도 있지만 이것을 분리하는 과정에서 나오는 기술적 문제 (내입장에서는 클래스끼리 각종 클래스변수 부터 매개변수와 변수들을 공유하며 서로 유기적으로 연결시켜줘야하는 것)이 문제인데...그래서 또 오늘도 필드화

 

 

필드화시키면 무조건 클래스전체에 접근할 수 있다고 생각했다.

람다식안에서 선언하고 생성한 클래스를 필드화를 시켰다. 그 클래스에서 만든 게터 메소드를 사용해야했기 때문에. 근데 그 게터의 클래스가 null 이라는 메세지로 아예 실행이 안되었다. 한참 해봐도 안되다가 다시 동료에게 물어보니

필드화를 시키면 그 필드화 시킨 변수들을 가장 먼저 메모리에서 참조한다고 하는데 이 경우는 버튼을 누르기 시작해야 람다식에서 내가 원하는 클래스의 객체를 만들기 때문에 그것이 생성되기이전에는(즉 버튼이 눌러지기 전에는 ) 생성되지않아 null 이 된다고 했다.

그래서 결국 게터에서 원하는 변수를 메인 클래스로 가져와 필드화 시킨후 가져올 클래스에 매개변수로 넣어주었다.

 

이렇게 할 필요 없이 어제 배운 static을 사용하면 항상 메모리에 올라가있다는데 써보면 어떨까?

메모리에 할당하는 순서가 문제라면 어제 배운 스태틱(선언함과 동시에 항상 메모리에 올라가 어디서나 변수를 공유할 수 있게하는 것)써서 접근해보면 어떨까라는 생각이 떠올랐고 바꾸어 써보았는데 맞았다.

이 방법이 더 낫다가 아니라 배운 개념의 정의를 바탕으로 가설을 세우고 실험을 했을 때 맞으면 기분이 엄청 좋다. 그리고 이걸 자꾸 하다보면 실력이 엄청 는다는 것도 알아서 기분이 좋다.

정말 개념으로 알고만 있는거랑 실제로 써보는건 왜이렇게 다른지. 어찌보면 단순히 지식의 저장 유무라 외우기 전과 후가 별 차이 없을 것 같은데 같은 개념이라도 많이 활용해볼 수록 느는 것 같다. 코딩 3주차 쯤 난 언제 어떤 개념 바탕으로 실험해보나 했는데 자그맣게 하고 있는 나를 보니 뭐 기부니 나쁘지 않다.

 

액션플랜

배운 개념들을 바탕으로 기존의 해결 방식이 아닌 나만의 가설로 해결이 될 것 같으면 실험을 해보고 블로그에 기록으로 남긴다.

난 A B 테스트가 단순한데 왜이렇게 좋은지 모르겠다.

 

오늘도 애써 짠 코드를 가지고~ 실험을 어디 한번~

어설프다 하...

댓글