목록전체 글 (41)
youngfromnowhere
PHP의 & 연산자는 C언어의 포인터와 자주 비교되는데, 정확한 의미는 한 변수에 또 다른 변수명(alias)을 붙여주는 것이다. 따라서 PHP의 reference는 실제 memory address를 가리키는 C언어의 포인터보다는 C++의 reference에 더 가까운 개념이다. https://youngnowhere.tistory.com/43 [Java] Call-by-Value/Call-by-Address/Call-by-Reference 함수를 호출할 때 함수에 '무엇을' 전달하느냐에 따라 함수 호출방식을 Call-by-Value, Call-by-Address, Call-by-Reference로 나눈다. Call-by-Value. 함수에 어떤 변수의 값을 전달한다. 함수는 값을 전달받았을 youngno..
Directory Indexing/Listing이란..? 클라이언트가 아파치 서버에 파일명이 아닌 directory명을 url로 하여 get 요청을 날렸을 때, 다음과 같이 서버가 웹페이지가 아니라 서버 내부의 directory를 반환하는 경우가 있다. 이것을 Directory Indexing/Listing이라 하는데, 외부 접속자에게 서버의 디렉토리 구조 및 파일 내용을 노출하기 때문에 보안에 심각한 위협이 된다. 참고) https://teddyh.tistory.com/9 Apache2 설정은 윈도우 버전의 경우 .../conf/httpd.conf 파일에 모든 내용이 적혀 있지만 리눅스 버전의 경우는 여러 파일에 분산되어 적혀 있다. 설정 파일이 위치한 디렉토리의 서브 디렉토리는 "...availabl..
Vim을 전천후 개발환경으로 쓰기 어려운 이유에는 여러가지가 있는데, 각종 자동완성, 자동 import문 작성 등의 편의기능이 없는 것도 그렇겠지만 문서 작업과 동시에 terminal을 다루지 못한다는 점이 가장 크다. 가령 코딩을 한 뒤 바로 코드를 컴파일하고 실행하고 싶으면 vim을 종료하고 터미널에서 진행해야 한다. 이 점 때문에 보통 터미널을 하나 더 띄워서 작업하게 되고, 어차피 터미널을 하나 더 띄우기 때문에 vim 내의 화면분할 기능도 안쓰게 된다. 그런데 vim 내부에서 terminal을 실행할 수 있게 되면 split 기능, session기능과 조합해서 vim을 다른 IDE들처럼 사용할 수 있게 된다. https://www.youtube.com/watch?v=bCBGCNjcSu4 링크한 ..
Vim의 큰 단점중 하나가 화면 전체를 쓴다는 것이다. 적당한 크기로 터미널 창을 열고 쓸 때는 문제가 없지만 긴 소스 코드를 편집하기 위해 전체화면으로 두고 쓸 때는 모니터의 오른쪽 공간이 낭비될 때가 많다. 또 화면의 맨 왼쪽부터 텍스트를 읽어야 하기 때문에 눈이 불편할 때가 많다. 그래서 Vim으로 코딩하는 사람들이 흔히 쓰는 방법중 하나가 그냥 터미널 창 두개를 전체화면의 절반크기로 양쪽에 띄우는 것이다. 이 방법의 단점은 alt+Tab으로 창을 전환할때 현재 어느 창을 조작중인지 헷갈릴 수 있다는 것이다. 이럴 땐 마우스를 동원하게 되는데 그러면 Vim을 사용하는 장점중 하나인 마우스를 쓰지 않고 문서편집을 할 수 있다는 점이 희석되버린다. 그렇다면 split 기능을 사용한다면 어떨까? Spli..
singleton 패턴으로 작성된 class를 처음 봤을 때 든 의문이 있다. class 정의의 body 안에 자기 자신의 instance를 만들면 그 instance 안에도 instance가 생성되고 그 안에도 생성되고.. 하면서 무한 loop가 발생하지 않을까? 하는 의문. 결론부터 말하자면 instance는 static제어자로 인해 static area에 단 한개 생성된다. (외부에서 동적으로 객체를 생성하는 것은 생성자에 대한 접근을 private으로 제어하여 차단된다.) 그렇다면 일부러 무한 loop를 발생시킬 수 있을까? MyClass는 body 안에서 자신의 instance를 생성하는데, 이 때 instance는 not-static이므로, MyClass의 instance인 c 내부에도 객체변..
java 컴파일 결과 생성되는 class 파일들을 한번에 모두 지우고 싶을 때, $ rm ./*.class rm 명령으로는 현재 디렉토리에 있는 파일들만 지워진다. 하위 디렉토리를 청소하고 싶을때는 find 명령을 쓰면 된다고 한다. $ find . -name *.class -type f -delte 그런데, 첫번째 적용할 때는 현재 디렉토리의 파일만 삭제되고 두번째 적용시에야 하위 디렉토리의 *.class 파일이 모두 삭제되었다. 왜 그럴까? 일단 테스트를 위해 위와 같은 directory structure를 만들었다. Test/에서 현재 directory를 대상으로 find 명령을 실행하니, 하위 디렉토리를 탐색하지 않는 것을 볼 수 있다. 그렇기 때문에 -delete 옵션까지 붙였을 때도 현재 di..
함수를 호출할 때 함수에 '무엇을' 전달하느냐에 따라 함수 호출방식을 Call-by-Value, Call-by-Address, Call-by-Reference로 나눈다. Call-by-Value. 함수에 어떤 변수의 값을 전달한다. 함수는 값을 전달받았을 뿐이므로 함수 외부의 메모리에 영향을 끼치지 못한다. 먼저 A class를 정의한다. a1.value, a2.value에 1, 2를 저장하고 swap method를 호출할 때는(line 7) 각 객체변수들의 값을 전달하였다. swap method 내부에서 각 값을 a1, a2라는 로컬변수로 받고 그 값을 swap한다. 그 결과, swap method 내부에서는 a1, a2의 값이 바뀌었지만 swap method 외부의 a1.value, a2.value에..
팀 프로젝트의 요구사항중 정규표현식을 이용하여 예외처리를 하라는 것이 있었다. 이에따라 위와 같이 먼저 regEx 패키지에 여러 형식들을 저장한 뒤, 입력값들이 해당 형식에 부합하는지 확인하고 부합하지 않으면 예외를 던지도록 해두었다. 형식에 맞지 않는 값을 입력했을 경우, 팀원들의 테스트에서는 에러메세지가 정상적으로 출력되었다. 그러나 터미널에서 내가 테스트했을 때는 에러메세지가 뜨지 않고 화면만 초기화되었다. 원인은 Menu를 화면에 출력하기 전에 화면을 청소하기 위해 MainMenu()에서 호출하는 clearScreen()이었다. 화면에 메인 메뉴를 출력하기 전에 콘솔화면을 청소하기 위해 clearScreen() 메소드가 추가되어 있다. https://www.javatpoint.com/how-to-..
첫 미니 프로젝트를 수행하는 과정에서, 팀원들은 intelliJ IDEA를 사용하고 난 터미널에서 작업하는 바람에 자꾸 무언가가 팀원들 환경에선 정상작동하는데 내 환경에선 작동하지 않는다던가 하는 문제가 생기고 난 그 문제에 묶여서 제대로 프로젝트에 기여하지 못하는 일이 생겼다. 팀원들이 "순수하게 궁금하다"면서 왜 터미널에서 작업하기를 고집하느냐고 물어왔는데, 딱히 이유가 생각나지 않아서 "그냥 지금까지 IDE를 깔 필요성을 못느꼈다"고 얼버무렸다.. 그러면서 날 되돌아봤는데, 난 과연 그냥 터미널과 Vim을 쓰고 싶은 힙스터인가..? 이런 질문을 스스로에게 하다가 내가 이런 방식을 고수하게된 어떤 이유가 떠올랐다. 내가 처음 배운 언어는 Python인데, Python에 입문하면 당연히 입문자들은 대부..
https://youngnowhere.tistory.com/36 [Git] 원격저장소 clone 후 Java compile 오작동 Git, Github으로 미니프로젝트를 진행하다가.. compile에 수정사항이 반영되지 않는것을 발견했다. 또, 한 branch에서 생성된 class file이 merge하지 않은 다른 branch에서 보인다거나 (로컬에서 확인한 결과 youngnowhere.tistory.com 근 5일간 나를 괴롭혔던 문제... Java로 기껏해야 예제나 따라치고 Git도 예제만 따라쳐봤기 때문에 이 현상은 처음 접한 것이었고 그래서 꽤나 골이 아팠다. 여기서 내가 "오작동이라고 여겼던 것"은 크게 두가지로 나눠지는데 1. 소스코드를 수정한 사항이 컴파일 이후 실행할 때 반영되지 않는다...