어떤 멤버변수 필드가 자신이 속한 클래스보다 다른 클래스에서 더 많이 사용 되어질 때 대상 클래스안에 새 필드를 선언하고 그 필드 참조 부분을 새 필드 참조 하도록 수정하자. 시스템이 발전하고 수정되어 앞으로 나아갈수록 새 클래스가 필요해지며 기능이 여기저기서 사용이 많아진다. 따라서 그러한 것들을 여기저기로 옮겨야 하는 상황과 필요가 있다. 지금은 합리적이고 올바르다고 판단해서 설계 및 개발을 했다 해도, 나중에는 그렇지 않을 수 있다. 문제는 그러한 상황에서 아무것도 하지 않는 것이다. 변경전 AccountType 클래스에서 interestRate 필드를 더 많이 사용하는 경우 class Account { private AccountType _accountType; private double _int..
메소드가 자신이 속한 클래스보다 다른 클래스의 기능을 더 많이 이용할 땐 그 메소드가 제일 많이 이용하는 클래스안으로 메소드를 이동하자 클래스에 기능이 너무 많거나 클래스가 다른 클래스와 과하게 연동되어 의존성이 지나칠 때는 메소드를 옮기는 것이 좋다. 옮기면 클래스가 간결해지며, 여러 기능을 더 명확하게 구현할수 있다. 옮기는 것이 판단하기 힘들거나 확신이 서지 않다면, 해당 메소드가 참조된 클래스를 확인해보고 직감에 따라 판단해서 옮겼더라도 나중에 다시 변경하면 된다. 변경전 class Account { private AccountType _accountType; private int _dayOverdrawn; double getOverdraftCharge() { if ( _accountType.is..
장황한 메소드에서 각 부분을 간결한 메소드로 변경해서 보면 코드가 이해하기 쉬워 진다. ...는데 짧고 간단한 소스예제라 잘 모르겠음 ㅋ 이 방법 길고 복잡한 소스에서는 어떨까? 1. 전환할 메소드의 이름과 같은 새 클래스(Gamma)를 생성 2. 새 클래스에 final 필드로 클래스와 멤버변수를 속성 추가 3. 생성자로 필요 변수들을 받을수 있도록 함 4. 복잡한 계산 로직을 나눔 5. 메소드 객체로 전환할 클래스에서 새로 만든 클래스와 메소드를 호출 변경 전 Class Account { int gamma(int inputVal, int quantity, int yearToDate) { int importantValue_1 = (inputVal*quantity) + getDelta(); int impo..
Parameter(매개변수)는 Method 호출 시 argument 로 넘어간 변수를 칭한다. 여기서 매개변수로의 값 대입은 Parameter로 받은 변수의 값을 호출한 Method에서 어떠한 값을 대입 하는 경우를 말한다. 전달받은 매개변수에 특정 Object나 Variable등을 참조 대입시에 코드의 명료성과 코드를 보는 이에게 Call by value 인지 Call by reference 인지 혼동을 불러 일으킬수 있다. 따라서, 매개변수로의 값 대입을 코드 작성할 시 지양해야 하며, 발견시에 해당 내용을 수정할 수 있도록 하자. 변경 전 int discount (int inputVal) { if (inputVal > 50) inputVal -= 10; // below code blah blah }..
사용된 수식이 봅잡할때 수식의 결과나 일부분을 직관적 이름의 임시변수에 대입 위에 조건문과 같은 경우에 논리조건문이 복잡해져서 코드를 보는 사람이 한번에 이해 하기 어려울때 사용하지만, 임시변수를 사용하면 메소드가 복잡해진다. 따라서, 더 좋은 방법이 없는지 생각해본 뒤 사용하자. 변경 전 if ( (platform.toUpperCase().indexOf('MAC') > -1) && (browser.toUpperCase.indexOf('IE') > -1) && wasInitialized() && (resize > 0) ) { // code blah blah } 변경 후 boolean isMac = platform.toUpperCase().indexOf('MAC'); boolean isIE = browse..
파일 4개를 생성 hosts_normal.txt 파일에는 기본 host 내용을 적고 hosts_test.txt 파일에는 추가할 ip와 domain 내용을 적고 저장한다 ## hosts_normal.bat 파일 내용 @echo off copy /Y C:\Windows\System32\drivers\etc\hosts_normal.txt C:\Windows\System32\drivers\etc\hosts ## hosts_test.bat 파일 내용 @echo off copy /Y C:\Windows\System32\drivers\etc\hosts_test.txt C:\Windows\System32\drivers\etc\hosts
Request Handler """ before_first_request : 웹 어플리케이션 기동 이후 가장 처음에 들어오는 HTTP 요청에서만 실행 before_request : 매 요청시 실행 after_request : 요청이 끝나 브라우저에 응답하기 전에 실행 teardown_request : 요청의 결과가 브라우저에 응답한 다음 실행 teardown_appcontext : HTTP 요청이 완료 되면 실행 되며, 애플리케이션 컨텍스트 내에서 실행 """ # 웹 브라우저로부터 HTTP 요청이 들어올 때마다 호출되는 메소드 @app.before_request def before_request(): g.temp = 'before_request' # print(getattr(g, 'temp', None)..
Java 버전 확인 > java -version 없으면?? > yum install java 1.8 버전 이상인지 확인하자 elasticserach 7 버전 다운받자 > cd /home > wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-x86_64.rpm > rpm --install elasticsearch-7.3.0-x86_64.rpm /etc/elasticsearch.yml 수정 # Path to directory where to store the data (separate multiple locations by comma): # #path.data: /var/lib/elasticsearch path.data..
개발에 있어서 . 리펙토링의 개념을 제대로 알고 있는가 . 상황에 맞는 적절한 디자인 패턴을 적용할 수 있는가 . 프로그램 버전과 문서화를 얼마나 꼼꼼히 하는가 . 최신 기술에 관심이 있는 사람인가, . 팀의 업무 문화와 수준을 올려줄 수 있다는 믿음을 주는 사람인가, . 팀 작업에 중점을 두는가, 본인에게 익숙한 것에 중점을 두는가, 개발 전 . 툴 활용 능력이 아예 없는 사람은 아닌가? . 자기 생각을 먼저 정리하고 문서화 하는가, . 다른 사람과의 대화를 통해 목적을 뚜렷이 하는가, 개발 중 . 사용하는 라이브러리나 프레임워크에 대한 지식이 있는가, . 설계의 간소화를 위해 노력하는가, 그리고 구현하는가, . 최신 기술을 얼마나 효율적으로 적용해 프로그램의 질을 향상하는가, . 툴이 알려준 경고들에..
Apache apr설치시 libtoolT No such file 에러시 # cp -arp libtool libtoolT 다시 ./configure 명령어 실행 PHP off_t undefined 에러시 --enable-zip 제거 Cannot find libmysqlclient_r 에러시 # cd /usr/local/mysql # ln -s ./lib ./lib64clea make:***[sapi/cli/php] 오류 1 # vi Makefile EXTRA_LIBS= -liconv 추가 # make 그래도 에러?? ㅠㅠ libiconv 경로 확인 후 --with-iconv-dir=경로 SVN svn 클론 에러 - vi ~/.subversion/servers 그런후 [global] 항목에 다음의 내용을 삽..
참고 http://blog.sz21c.com/569 마이그레이션 1. java -jar svn-migration-scripts.jar authors svn://192.168.1.107/wms_kr02 > authors.txt 실행 후 authors.txt에 메일을 알맞게 변경한다. 2. git svn clone --authors-file=authors.txt --no-metadata svn://192.168.1.107/wms_kr02 3. SourceTree에서 해당 폴더 Open 후, 저장소 설정에 GitLab 주소와 아이디 정보 저장한다. 4. 소스트리 해당 저장소 패치를 받는다. 5. Push를 진행하는데, Branch에 주의해서 강제푸쉬+모든 태그에 대해서 푸쉬를 진행한다. GitLab 프로젝트에..
1. 패키지 설치 yum install gcc openssl-devel libffi-devel bzip2-devel 2. 해당 버전 다운로드(https://www.python.org/ftp/python/) wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz 3. 압축 해제 tar zxf Python-3.7.4.tgz 4. Configure And Install cd Python-3.7.4 ./configure --enable-optimaizations make altinstall 5. 설치 확인 python3.7 -V 그냥 python 명령어로 python3.7 을 실행하고 싶을 때... vi /root/.bashrc 아래와 같이 alias py..
CentOS 7 / 고정 IP 설정하는 방법 CentOS 7을 설치할 때 네트워크를 설정할 수 있습니다. GUI 환경이므로 네트워크 설정을 알고 있다면 쉽게 고정 IP로 설정할 수 있습니다. 만약 DHCP로 설치했다면 다음과 같은 방법으로 고정 IP 설정을 할 수 있습니다. 네트워크 설정 파일 열기 네트워크 설정 파일은 /etc/sysconfig/network-scripts/ifcfg-enp0s3입니다.(파일 이름은 다를 수도 있습니다.) 설정 파일을 텍스트 에디터로 엽니다. TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6..
1. First, create a mode config profile. Go to VPN > Mode Config > Add. Note: The IP address information used in this mode config is the sample LAN network of a client (192.168.0.x). The First Pool should be any network OTHER than the actual network being used (I used 192.168.10.x). 2. Then, create the IKE Policy manually. Go to VPN > IPSec VPN > IKE Policy > Add. 3. Once done, create an IPSEC us..