쿨하게  2014.08.19 06:33  
확실한건 아니지만 주석부분을 컴파일러가 읽는건 같긴 합니다. 
예로 한글로 주석을 달면 종종 에러가 나서 끝에 . 을 찍곤 하죠 
이걸로 봤을때 읽긴 읽는거 같다고 생각이 들구요. 
뭐 주석 코드가 십만줄 단위로 넘어가면 모를까 설사 넘어간다 쳐도 영향이 거의 없을거라는 생각이네요. 
어떻게 보면 update에서 조건 검사하면 부하 걸리나요랑 비슷한 유형같기도 하고... 

중요한건 주석들이 양이 많아도 코딩에 영향이 없도록 잘 정리가 되어있냐 같네요. 
코딩하는데 무리만 없다면야... 주석이 많아도 별 상관없다고 봅니다.
전문가의손길  2014.08.19 09:29  
컴파일에나 조금 영향이 잇겟지만, 빌드후엔 영향이 없습니다
아케이코  2014.08.19 10:27  
뭐 왠만큼의 주석으론 신경쓸정도의 영향은 안주지만 간혹 주석 처리하고 바로 다음줄에 희안한 영향을 줘서 에러 아닌 에러가 나기도 하고 하는거 뺴곤 이상 없을겁니다..초반에 몇번 겪어서 전 주석 다음줄은 왠지 비우게 된다는 슬픈 이야기가..
슈슈에욬  2014.08.19 10:32  
유니티에서 소스코드에서 부하를 주는 부분중 기술적인 부분이 아닌 평범한 부분은 

주석 이 아니라 로그 입니다. Debug.Log 이놈이 미친듯이 메모리를 먹어요
답변맨  2014.08.19 13:52  
주석은 빌드시 제거되는 것이 프로그램의 특징이지요~

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=50994


즉, 주석은 컴파일러가 처리하지 않으므로 프로그램의 실행에는 영향을 주지 않습니다.

보통 주석은 코드에 대한 자세한 설명을 작성하거나, 특정 코드를 임시로 컴파일되지 않도록 만들 때 사용합니다.


컴파일과 빌드란 무엇이고 그 차이점에 대해서 알아보자.


1. 컴파일(Compile)

컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨) 

즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 한다.

자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다.


2. 링크(link)

프로젝트를 진행하다 보면 소스파일이 여러개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있다.

이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없다.

따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다.

여러개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업이다.

링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데

정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고, 동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말한다.

자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는데 이는 동적링크의 예이다.


3. 빌드(Build)

소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다. 

빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 < 빌드의 부분집합이라 할 수 있다.

빌드 과정을 도와주는 도구를 빌드 툴이라 한다.


3-1. 빌드 툴(Build Tool)

일반적으로 빌드 툴이 제공해주는 기능으로는 다음과 같은 기능들이 있다.

전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)

빌드 툴로는 Ant, Maven, Gradle 등이 있다.



출처: https://freezboi.tistory.com/39 [코딩 공작소]


 컴파일이란 텍스트 형태로 되어 있는 소스 파일을 기계어 파일로 만드는 과정을의미합니다. 단순히 텍스트 파일로 되어있는것을 해당프로그래밍 언어의 문법에 맞는지 검사하여 특별한 오류가 없다면 기계어 파일로 변경해줍니다.

그러나 컴파일된 파일은 실행파일이 아닙니다. 다시 말하면 우리가 윈도우 환경에서 실행할 수 있는 .exe파일의 형태가 아니라는 의미죠. 비쥬얼 C++에서는 .c로 되어있는 소스코드를 컴파일하면 .obj파일로 변환합니다. 마찬가지로 리눅스나 유닉스에서도 .c로 되어있는 소스코드를 컴파일하면 .o파일로 변환합니다. 이와 같은 .obj파일이나 .o와 같은 파일들을 오브젝트 파일이라고 부릅니다.

 

빌드기본적으로 실행파일을 만드는 것을 의미합니다. 사실상 하나의 소스파일이 하나의 실행 파일로 생성되기 위해서는 컴파일과정과 링크과정을 거쳐야 합니다. 링크라는 것은 말 그대로 실행파일로 만드는데 필요한 기능들을 컴파일된 파일에 연결시킨다는 의미입니다 따라서 .c파일을 컴파일한 후에 생성된 오브젝트 파일들을 이용하여 링크 작업을 해야 .exe파일이 생성됩니다.

비주얼 C++에서는 빌드를 통해서 링크 과정을 실행합니다. 만약 .c파일이 컴파일 되어있지 않은 상태에서 빌드를 실행하면 컴파일과 링크를 모두 실행하며 이미 .obj로 컴파일된 파일이 존재하면 빌드를 실행했을 때 컴파일 작업을 생략하고 링크 작업을 한후에 실행파일을 생성합니다


https://m.blog.naver.com/PostView.nhn?blogId=glorybeer&logNo=220644523148&proxyReferer=https%3A%2F%2Fwww.google.com%2F

https://goddaehee.tistory.com/149 갓대희님 블로그 참조

클래스 영역 ( 클래스변수(static o ), 인스턴스 변수(static x)

메서드 영역 ( 메서드 변수)

main 메서드인 스태틱 영역




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Mouse {
    public String name;
    public int age;
    public int countofTail;
 
    //기본생성자 public Mouse(){} 가 만들어 졌으나 기본생성자는 자동생성되니까 MouseDriver에서 바로 변수 참조 해서 사용이 가능하다.
    //public Mouse(){}
 
    //그러나 이런식으로 매개변수 있는 생성자를 만들면 코드를 더 직관적으로 파악할 수 았어서 좋다.
    //그냥 좋으려고 매개변수 있는 생성자 만들어주는것 코드 보기 편하라고
    public Mouse(String name, int age, int countofTail){
        this.name = name;
        this.age = age;
        this.countofTail = countofTail;
    }
    //얘는 함수 인거고
    public void sing(){
        System.out.println(name + " 찍찍!!!");
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MouseDriver {
    public static void main(String[] args) {
        Mouse mickey = new Mouse("미키"851); //클래스를 인스턴스화 해야지
        mickey.name = "미키";
        mickey.age = 85;
        mickey.countofTail = 1;
 
        mickey.sing();
 
        mickey = null;
 
        Mouse jerry = new Mouse("제리"731);
 
        jerry.name = "제리";
        jerry.age = 73;
        jerry.countofTail = 1;
 
        jerry.sing();
 
    }
}
cs

(객체 생성 코드 작성 후 Mouse mickey = new Mouse();

 Mouse mickey 스택 메모리에 객체 참조변수 들어감 -> new Mouse힙 영역에 인스턴스가 들어가게 된다 이떄 아직 값은 안들어감 new Mouse("미키",53,1)하면 값도 들어갈텐데 이때는 매개변수 생성자를 만들어 놨으면 가능) ->모든 메모리는 각자의 주소를 가지고 있는데 여기서는 힙 영역에 저장된 Mouse 클래스의 인스턴스(Mouse Object, Mouse 객체)의 시작 주소가 100번지라고 가정하면 스택 영역에 있는 참조변수는 100번지를 갖게 됨 (객체의 주소를 갖고 있다는 것을 포인터(화살표)로 표현) 이는 대입 (=)연산자를 이용해서 참조한다는 표시를 해준다. ->   그 이후에  mickey.name = "미키"; mickey.age = 85; mickey.countOfTail = 1; 넣어서 힙영역안에 인스턴스에 값을 넣어준다. 


즉,

0. 스태틱 영역에 클래스 (Mouse(변수name,age,countOfTail,메서드sing() 넣어주기), main(args:String[]), java.lang)넣어주기

1. 스택메모리에 참조변수 넣기

2. 힙영역에 인스턴스 객체 빈 데이터로 넣어주기

3. 대입연산자(=)을 통해서 스택메모리 참조변수가 힙영역의 인스턴스 참조

4. 힙 영역에 인스턴스 데이터 넣어주기



실장님 설명

1. 스택메모리에 참조변수 넣기

2. 힙 영역에 인스턴스 객체 빈 데이터로 넣기 빈땅(null값 참조)

3. 힙 영역에 인스턴스 데이터 넣어주기

4. 대입연산자를 통해서 스택 메모리 참조변수가 힙 영역의 인스턴스 참조 


이때 3,4순서가 바뀔수도있다.-> 그래서 순서가 보장이 안된다. 참조가 먼저 일어나면 스택 메모리 참조변수가 이제 힙 영역에 빈 데이터 객체 null을 참조하게 되는데

이때 NullpointerExceptionError가 발생할 수도 있다. 그래서 주의해야되고  금융권 같은 경우 하루에 몇천번의 거래가 오가는데 그중에 몇번 발생한다면 큰 일 난다. 오류 수정할 코드 있는데 아직 레벨이 더 오르고 하기 





자바 메모리구조(static,stack,heap)

http://blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220954420688

+ Recent posts