목록분류 전체보기 (109)
나의 지식 보관소
객체지향에는 SRP(단일 책임 원칙), OCP(개방 폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)과 같은 총 다섯개의 원칙이 있고 줄여서 SOILD원칙이라 부른다. Single Responsiblity Principle (단일 책임 원칙) : 클래스에는 한 가지, 단 한 가지 변경 이유만 존재해야 한다. Open Closed Principle (개방 폐쇄 원칙) : 클래스는 확장에 열려 있어야 하며 변경에 닫혀 있어야 한다. Liskov Subtitution Principle (리스코프 치환 원칙) : 상속받은 클래스는 기초 클래스를 대체할 수 있어야 한다. Dependency Inversion Principle (의존 역전 원칙) : 추상화에 의존..
수식을 표기하는 방법에는 우리가 흔히 사용하는 중위 표기법말고도 전위 표기법과 후위 표기법이라는 것이 있다. 중위 표기법 -> ( 1 + 2 ) * 7 후위 표기법 -> 1 2 + 7 * 전위 표기법 -> * + 1 2 7 이러한 전위, 후위 표기법의 특징은 연산자의 순서에 따라 연산순서가 결정되기 때문에 연산자 우선순위나 소괄호가 필요없다는 점이다. 중위 표기법을 후위 표기법으로 바꾸는 법 피연산자가 들어오면 바로 출력한다. 연산자가 들어오면 스택에 들어있는 연산자와 비교해서 스택에 있는 연산자보다 우선순위가 높으면 스택에 쌓고, 낮으면 스택에 있는 들어온 연산자보다 우선순위가 낮은 연산자를 모두 출력하고, 들어온 연산자를 스택에 쌓는다. 연산자 우선순위는 ㆍ *, / : 제일 높다 ㆍ +, - : 두..
스트래티지 패턴은 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만드는 것이다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 는 내가 보는 책에서 나온 정의이고 쉽게 말하자면, 객체가 할 수 있는 행위들을 전략으로 만들어 놓고, 동적으로 전략을 바꿔가며 행위를 수정 할 수 있도록한 패턴이다. public class StrategyPattern { static public void main(String args[]) { Player player = new Player(); player.setAttackBehavior(new Punch()); player.PerformAttack(); player.setAttackBehavior(new K..
피이썬의 예외 처리는 기본적으로 아래와 같은 구성을 띤다. try: ... except [ 발생 오류 [ as 오류 메세지 변수 ] ]: ... []로 둘러싼것은 생략 가능하다는 표현이다. 만일 except:만 사용하면 발생하는 모든 오류를 except블럭에서 처리하고 오류를 지정하면 해당 오류일때만 처리한다 오류 메세지 변수는 말그대로 오류메세지를 저장한다. except는 여러개 올 수 있고, 하나의 except에서 여러 오류를 처리하고 싶다면 except(error1, error2): 처럼 괄호를 사용해 묶어서 처리하면 된다. pass 오류를 그냥 통과시킬때에는 except블럭내에 pass만 써주면 된다. pass 명령은 단순히 실행할 코드가 없음을 나타낸다. raise 오류를 일부러 발생시킬때에는 ..
__all__변수는 string형 리스트로 __init__.py를 사용할 경우에 __all__변수에 import가능한 모듈을 정의해주어야 한다. 하지만 만약 form의 마지막 항목이 모듈인 상태로 import*을 사용하면 이에 위 원칙에 상관없이 전부 사용가능하다. 위 원칙은 패키지를 대상으로 import * 하는 경우이다.
상속 클래스를 상속하기 위해서는 다음과 같이 클래스 이름 뒤 소괄호 안에 상속할 클래스를 넣어주면 된다. class subclass(parentClass) 메서드 오버라이딩 부모클래스의 메서드를 오버라이드하기 위해서는 그저 부모클래스에 있는 메서드와 동일한 이름으로 메서드를 다시 만들면 된다. 클래스 변수 클래스변수는 다른언어에서의 static과 살짝 비슷하면서 다르다. 클래스 변수는 클래스에 선언한 변수로써 다음과 같이 선언한다. class Person: age = 10 이렇게 선언한 클래스변수는 클래스이름.클래스변수 로 사용할 수 있다. 이러한 점은 static과 같다. 하지만 다른점은 클래스변수는 객체에서도 접근이 가능한것에( 단 다른 객체에서 접근해도 같은 주소값에 있는 클래스변수에 접근하는 것 ..
파이썬에서는 생성자를 포함한 대다수의 메서드들이 첫번째 매개변수로 self(이름을 바꿀순 있는데 보통 일케 쓴다)를 갖는다. __init__에서의 self는 방금 생성된 객체를 자동으로 참조하고, 메서드에서의 self는 메서드를 호출한 객체를 자동으로 참조한다. (자동으로 참조하므로 호출시에 첫번째 매개변수는 무시하고 다른 인자를 넘겨주면된다.) 첫줄에서 대다수의 메서드들이라고 표현한 까닭은 클래스이름.메서드 형태로 호출할때에는 self 없어도 된다. 그말은 즉 이 형태로 호출할시 첫번째 매개변수가 어떤 객체를 자동으로 참조하지 않는다는 뜻이 되므로, 필요할시에는 명시적으로 직접 어떤 객체를 인자로 넘겨주어야한다.