IT

IT

통신사별 DNS IP 리스트 (구글, SKT, KT, LG)

통신사별 DNS IP 리스트 (구글, SKT, KT, LG) 구글 (Google Public) 기본 DNS 서버 : 8.8.8.8 보조 DNS 서버 : 8.8.4.4 SKT 기본 DNS 서버 : 219.250.36.130 보조 DNS 서버 : 210.220.163.82 KT 기본 DNS 서버 : 168.126.63.1 보조 DNS 서버 : 168.126.63.2 LG 기본 DNS 서버 : 164.124.101.2 보조 DNS 서버 : 203.248.252.2

IT/Clean Code

[Clean Code] 0. 앞 부분...

5S 철학... 1. 정리 또는 조직화(정렬) : 적절한 명명법 방법 등을 통해 무엇이 어디에 있는지 알아야 한다. 2. 정돈 또는 체계화 : 코드는 누구나 예상하는 위치에 있어야 한다. 그렇지 않다면 위치 정돈을 하여라. 3. 청소 또는 정리 : 소스에 과거 이력이나 주석으로 처리한 코드 등은 제거하기 바란다. 4. 청결 또는 표준화 : 프로젝트 내 일관적인 구현 스타일과 기법을 가져라. 5. 규율 또는 생활화 : 관례를 따르고, 변경이 필요하다면 기꺼이 변경 하여라. 맞는 말도 있는 것 같고 아닌 말도 있는 것 같고...

IT/리팩토링

[리팩토링] 임수변수 내용 직접 삽입

간단한 수식을 대입받는 임시변수를 사용할때는 임시변수 참조 부분을 수식으로 치환 변경 전 double basePrice = anOrder.basePrice(); return (basePrice > 1000); 변경 후 return (anOrder.basePrice() > 10000); 변경 전 double basePrice = _quantity * _itemPrice; if (basePrice > 1000) return basePrice * 0.5; else return basePrice * 0.9; 변경 후 A if (getBasePrice() > 1000) return getBasePrice() * 0.5; else return getBasePrice() * 0.9; double getBasePric..

IT/리팩토링

[리팩토링] 메소드 삽입

호출하는 메소드의 기능이 너무 간단해서 내용이 뻔하다면 메소드 기능을 한개로 병합하고 삭제하자. 변경 전 String getRating() { return (isPassRate())? "Y" : "N"; } boolean isPassRate() { return _score > 5; } 변경 후 String getRating() { return (_score > 5)? "Y" : "N"; }

IT/리팩토링

[리팩토링] 메소드 추출

리팩토링의 주된 작업은 코드를 포장하는 메소드를 적절히 정리하는 것이다. 핵심적인 리팩토링 기법은 코드 뭉치를 별도의 메소드로 빼내는 메소드 추출, 반대로 메소드를 호출 하는 곳에 메소드 삽입 기법이다. 메소드 추출 메소드 추출시에 가장 힘든 작업은 지역변수 처리, 주로 임시변수로 힘든경우가 많음. 1. 임시변수를 메소드 호출로 전환 후 없어도 되는 임시변수 삭제 2. 임시변수가 여러곳에서 사용된다면 임시변수 분리 3. 임시변수가 너무 얽혀 있다면 자료 객체 클래스로 전환해서 사용 void printOwing(double amound) { printBanner(); print("name : " + _name); print("amount : " + amound); } void printOwing(doubl..

IT/리팩토링

리팩토링 - 코드 개선 방법

중복 코드 똑같은 코드 구조가 두 군데 이상 있을 때 그 부분을 하나로 통일하면 개선할 수 있다. 단순한 예는 한 클래스의 두 메소드 안에 같은 코드가 들어 있는 경우다. 이럴 때는 메소드 추출 기법을 적용해서 겹치는 코드를 빼내어 별도의 메소드로 만들고 그 메소드를 두 곳에서 호출 또, 한 클래스의 두 하위 클래스에 같은 코드가 들어 있는 경우가 있다. 메소드 추출 기법을 적용해서 중복을 없앤 후 메소드 상향 기법을 적용한다. 코드가 같지 않고 비슷하다면, 같은 부분과 다른 부분을 분리한 다음 템플릿 메소드 형성 기법을 알고리즘만 다르다면, 알고리즘 전환 기법을 중복코드가 중간에 있다면 주변 메소드 추출 기법을 적용한다. 서로 상관없는 두 클래스 안에 중복 코드가 있다면, 모듈 추출로 제3의 클래스로 ..

IT/리팩토링

[리팩토링] 클래스 멤버변수 이동

어떤 멤버변수 필드가 자신이 속한 클래스보다 다른 클래스에서 더 많이 사용 되어질 때 대상 클래스안에 새 필드를 선언하고 그 필드 참조 부분을 새 필드 참조 하도록 수정하자. 시스템이 발전하고 수정되어 앞으로 나아갈수록 새 클래스가 필요해지며 기능이 여기저기서 사용이 많아진다. 따라서 그러한 것들을 여기저기로 옮겨야 하는 상황과 필요가 있다. 지금은 합리적이고 올바르다고 판단해서 설계 및 개발을 했다 해도, 나중에는 그렇지 않을 수 있다. 문제는 그러한 상황에서 아무것도 하지 않는 것이다. 변경전 AccountType 클래스에서 interestRate 필드를 더 많이 사용하는 경우 class Account { private AccountType _accountType; private double _int..

IT/리팩토링

[리팩토링] 객체간 메소드 이동

메소드가 자신이 속한 클래스보다 다른 클래스의 기능을 더 많이 이용할 땐 그 메소드가 제일 많이 이용하는 클래스안으로 메소드를 이동하자 클래스에 기능이 너무 많거나 클래스가 다른 클래스와 과하게 연동되어 의존성이 지나칠 때는 메소드를 옮기는 것이 좋다. 옮기면 클래스가 간결해지며, 여러 기능을 더 명확하게 구현할수 있다. 옮기는 것이 판단하기 힘들거나 확신이 서지 않다면, 해당 메소드가 참조된 클래스를 확인해보고 직감에 따라 판단해서 옮겼더라도 나중에 다시 변경하면 된다. 변경전 class Account { private AccountType _accountType; private int _dayOverdrawn; double getOverdraftCharge() { if ( _accountType.is..

IT/리팩토링

[리팩토링] 메소드를 메소드 객체로 전환

장황한 메소드에서 각 부분을 간결한 메소드로 변경해서 보면 코드가 이해하기 쉬워 진다. ...는데 짧고 간단한 소스예제라 잘 모르겠음 ㅋ 이 방법 길고 복잡한 소스에서는 어떨까? 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..

IT/리팩토링

[리팩토링] 매개변수로의 값 대입 제거

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 }..

IT/리팩토링

[리팩토링] 직관적 임시변수 사용

사용된 수식이 봅잡할때 수식의 결과나 일부분을 직관적 이름의 임시변수에 대입 위에 조건문과 같은 경우에 논리조건문이 복잡해져서 코드를 보는 사람이 한번에 이해 하기 어려울때 사용하지만, 임시변수를 사용하면 메소드가 복잡해진다. 따라서, 더 좋은 방법이 없는지 생각해본 뒤 사용하자. 변경 전 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..

IT

batch 프로그램으로 host 변경하기

파일 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

IT

개발에 있어서...

개발에 있어서 . 리펙토링의 개념을 제대로 알고 있는가 . 상황에 맞는 적절한 디자인 패턴을 적용할 수 있는가 . 프로그램 버전과 문서화를 얼마나 꼼꼼히 하는가 . 최신 기술에 관심이 있는 사람인가, . 팀의 업무 문화와 수준을 올려줄 수 있다는 믿음을 주는 사람인가, . 팀 작업에 중점을 두는가, 본인에게 익숙한 것에 중점을 두는가, 개발 전 . 툴 활용 능력이 아예 없는 사람은 아닌가? . 자기 생각을 먼저 정리하고 문서화 하는가, . 다른 사람과의 대화를 통해 목적을 뚜렷이 하는가, 개발 중 . 사용하는 라이브러리나 프레임워크에 대한 지식이 있는가, . 설계의 간소화를 위해 노력하는가, 그리고 구현하는가, . 최신 기술을 얼마나 효율적으로 적용해 프로그램의 질을 향상하는가, . 툴이 알려준 경고들에..

IT

GitLab - SVN 마이그레이션 및 Clone

참고 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 프로젝트에..

IT

[토끼책] 객체지향의 사실과 오해 - 2장. 이상한 나라의 객체

객체를 발견하고 창조하는 것은 지식과 행동을 구조화 하는 문제이다 (by. 레베카 위프스브록) 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉽다고 하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 기본적인 인지능력에 기반을 두고 있기 때문이다. 하지만 인간은 물리적인 한계를 넘어 추상적인 사물까지도 객체로 인식할 수 있다. (주문, 통장의 이체 등 손이나 눈에 안보이는 추상적인 것들) 저자는 이 장의 설명을 위해서 "이상한 나라의 앨리스" 책의 앨리스를 예로 들고 있다. 문을 지나 정원을 가기 위해서 앨리스는 키를 조정해야 한다. 병속의 액체나 케이크를 먹는 것으로 키를 조정할 수 있다고 하며 또, 버섯으..

IT

[토끼책] 객체지향의 사실과 오해 1장 - 협력하는 객체들의 공동체

"객체지향이란 실세계를 직접적이고 직관적으로 모델링 할 수 있는 패러다임" 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업. 즉, 객체지향 소프트웨어는 실세계의 투영이며 현실 세계 사물에 대한 추상화이다. 하지만, 현실은 객체에 직접적으로 대응되는 실세계의 사물을 발견한 확률은 높지 않다. 또 존재하더라도 유사성을 찾기가 매우 어려운 게 일반적이다. 화재의 확산을 막는 "방화벽" 과 네트워크의 침입을 막는 "방화벽" 을 예시로 실제 사물과 소프트웨어 객체 간의 의미적 거리와 연관성 간의 괴리를 예로 들을수 있다. 예 소프트 웨어에서 보는 객체 : 행위에 대한 "캡슐화(encapsulation)" 와 "자율성(autonomous)" 메시지(아규먼트) : 현실 세계의 사람들..

상쾌한기분
'IT' 카테고리의 글 목록 (5 Page)