가끔식 개발을 하다 보면 햇갈리는 부분이 간혹 생겨서 이번 기회에 정리하고자 나름 웹서핑을 하여 결론을 정리해보았습니다.

자바스크립트는 call by value 만 존재한다는 게시글과 call by value, call by reference 둘 다 존재한다는 게시글도 제법 보였습니다.

function callByValue(a) {
	
    a = 55;
    console.log(a);
    
}

var a= { obj : 44 };

 

해당 함수를 콘솔에 실행하면 아래와 같은 결과 값이 도출됩니다.

 

 

 

callByValue 함수에 a변수를 호출하면 a의 값이복사되어 전달되어 함수 내부에서 a에 값이 55로 바뀌어 출력됩니다.

console.log로 a변수를 호출하면  위에 값이 {obj : 44 } 값이 출력되는 것을 확인할 수 있습니다.

 

 

function callByValue2(o) {
    o.obj = 55;
    console.log(o);
    
}

var a = { obj : 44};

 

 

객체의 obj를 매개변수로 호출하여 함수 스코프네에서 객체값을 수정할 경우 참조된 객체 값이 수정된 상태를 유지합니다.

이를 Call by Sharing이라는 용어로 표현하기도 합니다.

 

 

결론적으로 자바스크립트는 Call by Value만 존재합니다.

블로그 이미지

클라인STR

,

소수점 자리수가 한자리적게 나온다는 버그리포팅을 받아 해당 내용을 작성하게 되었다.

package com.company.format;
import java.text.DecimalFormat;
public class DecialFormatExample {
    public static void main(String[] args) {
        double  d1 = 20.0140000;
        double  d2 = 33.0235989;
        DecimalFormat format = new DecimalFormat("##.####");
        System.out.println("d1  / "+format.format(d1));
        System.out.println("d2 / "+format.format(d2));
        System.out.println("=======================");
        format = new DecimalFormat("#0.0000");
        System.out.println("d1 / "+format.format(d1));
        System.out.println("d2 / "+format.format(d2));
    }
}

소수점 맨뒤에 자리수가 0인경우 ##.#### 으로 한경우 0이 생략된다. 

이때 자리수를 유지해주기위에서는 .뒤로 0000으로 채운다. 

#일경우 0은 표시하지 못하는거같다. 

 

 

블로그 이미지

클라인STR

,

사내환경에서 loadsh 라이브러리를 사용합니다. _.each 구문내에서 break 문을 사용하여서 빠져나와야 되는 경우가 생겨서 

return 을 사용하니 제대로 동작하지 않았습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
try {
   _([12345]).each((element) => {
      
      if (element === 2) {
         throw new Error("break");
      }
      
   })
}
catch (e) {
     if(e.message == "break"){
   
    }  
}


cs


실제 실무에 적용해본 코드입니다. break 빠져나와야 되는 케이스인 경우에  Exception을 발생하는 구문을 작성합니다. 

try ~ catch  구문에서 catch 해당되는 부분에서 해당 조건인경우 예외처리를 해주거나 루프를 빠져나오는 걸 확인할 수 있습니다. 



참고 스택오버플로우

블로그 이미지

클라인STR

,

2020년 오랜만에 글을 쓰게됩니다. 오늘은 형광등 안정기 교체에 대한 글을쓰고자합니다. 

작년부터 LED 형광등 교체이후에 불이 계속 깜빡깜빡 거리는 현상이 발생해서 결국 안정기를 교체하기로 하였습니다. 


등이 깜빡깜빡거리는 곳에 안정기 규격을 먼저 확인합니다. 

1등용은 형광등 하나, 2등용은 형광등2개를 연결할 수 있습니다. 


현제 교체해야될 안정기의 규격을 확인한 다음 인터넷 혹은 철물점에 가서 주문을 합니다. 220V FPL 36W 2등용이네요.

저는 네이버 쇼핑에서 2등용 36W 안정기를 구매하였습니다.  


먼저 작업하기전에 차단기를 내리고 작업해줍니다. 전기 작업을 자주 안하다보니 좀 무섭기도 합니다. 


안정기 교체전에 안정기를 먼저 촬영해둡니다. 안정기 제거후 새 안정기를 부착할때 반드시 필요합니다.


안정기 전원 공급선을 먼저 뽑아줍니다. 


전원 공급 선을 뽑을땐 전원쪽 버튼을 눌르면서 선을 흔들흔들하면서 땡겨줍니다. 그리고 전원선을 분해한 후에는 등기구를 분리해줍니다. 



등기구한쪽이 강하게 접착되어있어서 어쩔수 없이 등기구를 탈부착 못하고 해당상태로 교체하였습니다. ㅠㅠ 



전원공급선 오른쪽에 있는 4가닥에 선을 빼줍니다. 흰선검은선 한쌍은 1등용 안정기에 사용하는 선이며, 나머지 한쌍은 2등용 안정기에서 사용하는 선입니다. 



2등용안정기에 접지선을 나사를 풀어줍니다. 그리고 양쪽 형광등 소켓을 십자 드라이버로  풀어줍니다.


 



형광등 소켓을 등기구에 분리한다음 소켓에 들어가있는 선을 빼야되는데 잘빠지지지 않습니다. 이 부분은 저의 아버지께 전화해서 물어보았는데 의외로 쉬운방법이 있었습니다. 4가닥의 선이 들어간 위치 밑에 내모낳게 누룰수 있는 홈이 있습니다. 일자드라이버 또는 가는핀셋, 쪽가위 같은걸루 눌르면서 선을 힘줘서 천천히 땡겨줍니다. 



 한 가닥씩 천천히 뽑아줍니다. 


그리고 소켓을 뽑기전에 선이 들어가있었던 위치를 사진으로 찍어줍니다. 나중에 재조립 할때 헷갈릴 수 있으므로 양쪽 소켓을 분해할때 반드시 위치를 사진으로 찍어놓는게 좋습니다. 



전원 공급선에 튀어나온 부분을 뒤로 밀어내서 안정기를 등기구에서 완전히 분리합니다. 그리고 새 안정기를 개봉한 후 연결합니다. 



안정기를 설치할때 오른쪽이 접지선을 향하게끔 안전기를 180도 돌려서 방향을 맞춰줍니다. 왼쪽 형광등소켓부터 백색과 회색을 나란히 맞춰서 끼워줍니다.

초록색 접지선을 연결해줍니다. 형광등 소켓을 선을 꼽을때는 구멍에 맞춰서 꼽아주기만 하면됩니다. 



안정기 우측 흰선,검은 선 2가닥을 등기구 뒤로 넣었다가 전원공급기 압쪽으로 선을 빼줍니다.  4가닥에 안전기 선을 위에 흰선2가닥, 아래검은선 2가닥씩 붙여서 각각 구멍에 끼워줍니다. 나머지 전원선 2가닥을 각각 구멍에 끼워주고 형광등 소켓을 오른쪽에 연결해주면 마무리 됩니다. 


차단기를 다시 올린다음 형광등 불이 잘들어오는지 확인합니다. 



이상 안정기 교체후기 였습니다. 

블로그 이미지

클라인STR

,

mac에서 커맨드라인 명령어가 갑자기 동작하지 않는 경우가 생겼다. echo $PATH 명령어를 실행해보니 바로직전에 code . 설정하면서 형식이 잘못 입력된걸 확인할 수 있었다. 


export PATH=/usr/bin:/bin


해당명령어를 다시 실행하면 정상적으로 다시 동작하였다. 




블로그 이미지

클라인STR

,

  vi ~/.bash_profile


명령어를 실행하여 해당명령어를 추가합니다.  이때 Visual Studio Code 위치가 응용프로그램 위치가 아닌경우 해당폴더로 위치를 옮겨주시면 실행이 됩니다. 


source ~/.bash_profile


명령어를 실행하여 적용한다음 프로젝트를 열고자하는 디렉토리로 이동한 다음 code . 명령어를 수행해주면 됩니다.



참고 : https://code.visualstudio.com/docs/setup/mac


블로그 이미지

클라인STR

,

직접 해보는 손코딩 BeautifulSoup 스크래이핑 실행하기 



BeautifulSoup 모듈과, Flask 모듈을 설치합니다.




# 모듈을 읽어 들입니다.

from flask import Flask
from urllib import request
from bs4 import BeautifulSoup


# 웹 서버를 생성합니다.

app = Flask(__name__)
@app.route("/")

def hello():
#urlopen() 함수로 기상청의 전국 날씨를 읽어온다.
target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")

#BeautifulSoup를 사용해 웹 페이지를 분석한다.
soup = BeautifulSoup(target, "html.parser")

#location 태그를 찾습니다.
output = ""
for location in soup.select("location"):
# 내부의 city, wf, tmn, tmx 태그를 찾아 출력한다.
output += "<h3>{}</h3>".format(location.select_one("city").string)
output += "날씨: {}<br />".format(location.select_one("wf").string)
output += "최저/최고 기온: {}/{}"\
.format(\
location.select_one("tmn").string,\
location.select_one("tmx").string\
)
output += "<hr/>"
return output





실행을 할려고 명령어를 입력했는데 에러가 발생합니다. 엇... 아래와같이 명령어를 수정하고 코드를 실행합니다. 



set 을 export로변경하고 명령어를 실행하면 정상적으로 실행됩니다. 



웹페이지 실행시 에러가나면 해당화면이 나타납니다.  




오타를 수정한뒤 다시 샐행해보면 정상적으로 실행되는걸 확인할 수 있습니다. 





블로그 이미지

클라인STR

,

 - 구문 오류 : 프로그램이 실행되기전에 발생하는 오류를 말합니다. (괄호쓰기, 들여쓰기 오타 등에 문법오류)


print("# 프로그램시작")

print("# 구문오류)



[구문오류 예시]


구문오류에 경우 프로그램이 실행되기 전에 나타나는 오류입니다. 코드를 수정하지 않으면 프로그램이 실행조차 되지 않습니다.



- 예외  : 프로그램실행시  발생하는 오류를 Exception, RunTimeException 이라고 합니다. 


print("# 프로그램시작")

print(list_b[1])




해당코드를 실행해보면 주석으로 처리한 "프로그램시작" 출력되고 print 구문에서 런타이 오류가 발생하였습니다. 



선택미션 





정답을 확인해봅시다. 








블로그 이미지

클라인STR

,