목록분류 전체보기 (109)
나의 지식 보관소
자바에서 클래스에 public 접근제한자를 추가하기 위해서는 그 클래스의 이름이 파일명과 동일해야한다. ( 파일명과 일치하는 클래스 내부에서 다른 클래스를 포함하는 경우는 public이 가능하다. ) 이러한 제한이 있는 이유는 가독성에 도움을 주기 위함인데, 하나의 자바파일에 여러 개의 클래스를 작성하는 경우 대표클래스를 지정하고 파일명과 동일하게 하는 것이 가독성에 도움이 된다.
위 사진처럼 윈도우10 에듀케이션 버전에 잠금화면 추천기능이 없고 "이러한 설정중 일부는 조직에서 숨겼거나 관리합니다."라는 메세지가 나온다. 온갖 난리를 다 피워봤는데 해결이 안됐고 그 중 에듀버전은 원래 이제 안된다 라는 글을 봐서 찾아보니 에듀는 안된다는 글이 많았다. 진위여부는 확실치 않으니 혹시라도 활성화하는 법을 아는 사람이있다면 알려주시길 바란다. 일단 나는 못해먹겠어서 대안책으로 찾은 것이 www.microsoft.com/en-us/p/dynamic-theme/9nblggh1zbkw?activetab=pivot:overviewtab 이다.. 본디 이런 글쓰는 블로그가 아니여서 쓸까 말까 했지만 내가 여기다가 2시간을 갖다 꼴아서.. 다른사람은 시간을 아끼셨으면 한다.
테스트 주도 개발에 대한 책을 보던 중 이상한 코드를 발견했다 추상클래스의 추상메서드를 하위 클래스에서 오버라이딩하는데 리턴타입이 다른데도 컴파일이 정상적으로 됐다. 분명 상속관계에서 메소드 오버라이딩은 리턴타입, 메소드 이름, 매개변수가 완전히 동일해야 이루어진다고 배웠었는데.. 하고 검색해보니 자바한정으로 ( 사실 다른언어도 되는진 잘 모르겠는데 C#에서는 안되는걸 확인했다. ) 다음 두가지 조건을 만족하면 리턴타입이 달라도 오버라이딩이 허용된다. - 반환형이 원시타입이 아닌경우 - 상위 클래스의 메서드의 반환형으로 오버라이드된 메서드의 반환형이 자동 형변환이 가능한 경우 class Base { public Object display(String obj) { System.out.println("Bas..
junit을 통한 테스트를 위한 코드와 소스코드를 분리하기 위해서 폴더를 구분하니 두 코드를 동일한 패키지에 둘 수가 없어서 곤란하던 차에 maven을 이용해봤다. maven을 통해 프로젝트를 생성하면 아래 사진처럼 경로 전체가 패키지명이 아니라 끝부분만 패키지명으로 사용하고 있는 것을 볼 수 있다. maven 없이 저렇게 패키지를 사용하기 위해서는 우선 자바 프로젝트 생성시 기본으로 생성되는 src가 Java Source Path로 지정되어있는 것을 풀고 다음과 같이 폴더를 만들어주면 된다. 나는 com.practice.tdd를 패키지명으로 사용할 생각이기 때문에 src\main\java와 src\test\java 폴더를 Java Source Path로 지정해주면 된다. 이렇게 하면 아래 사진처럼 경로..
파이썬에서 클래스에 직접 접근할 수 있는 메서드 즉 정적메서드는 두가지로 @staticmethod와 @classmethod라는 데코레이터를 사용하여 정의한다. 정적메서드이기 때문에 인스턴스 메서드처럼 self 인자를 갖지 않는다. 또 다른 언어들과 다르게 인스턴스에서도 정적메서드에 접근이 가능하다. 우선 @staticmethod는 다음과 같이 사용한다. class MyClass: @staticmethod def add(a, b): return a+b myclass = MyClass() print(myclass.add(1,2)) @classmethod는 다음과 같이 사용한다. class MyClass: @classmethod def add(cls, a, b): return a+b myclass = MyCl..
제네레이터 제네레이터는 이터레이터를 만드는 도구이다. 제너레이터는 일반함수와 많이 닮았지만 데이터를 반환할때 return 대신 yield를 사용한다. 함수는 yield를 만나면 값을 반환하고 그 자리에서 실행을 멈춘다. 그리고 다시 next메서드가 호출되면 중단된 지점 부터 다시 실행한다. def Generator(data): for index in range(0, len(data)): yield data[index] + '!' for char in Generator('Hello'): print(char) temp = Generator('World') print(temp.__next__()) print(temp.__next__()) print(temp.__next__()) print(temp.__next..
리스트 컴프리헨션 리스트 컴프리헨션은 리스트를 사용할때 선언과 할당을 동시에 한줄로 할수있게 해주는 문법이다. 리스트 컴프리헨션의 기본적인 문법은 다음과 같다. [ for in ] 예를 들면 다음 두 표현은 같은 표현이다. # 이 표현과 size = 10 arr = [0] * size for i in range(len(arr)): arr[i] = i * i # 이 표현은 결과가 같다. size = 10 arr = [i * i for i in range(size)] 바깥을 감싸는 기호가 []라면 리스트가 만들어지고, {}라면 집합이, {}를 사용하면서 for문 앞에 key: value 쌍을 써주고 사용하는 변수를 두개로 두면 딕셔너리가 만들어진다. ()는 튜플이 아니라 제너레이터가 생성되며 튜플을 생성하려..
이터레이터 ( Iterator ) 이터레이터는 반복자라는 뜻으로 객체 지향 언어에서 배열이나 배열과 유사한 자료 구조의 내부 요소를 순회하는 객체이다. 파이썬에서는 for문을 써서 데이터를 하나씩 처리할 수 있는 시퀀스들을 Iterable Object라고 부르고 list, dict, set, str, bytes, tuple, range 등이 해당된다. for a in [2,9,3,6,7]: print(a) for b in "Hello World": print(b) 파이썬의 내장함수인 iter()는 "iter(Iterable객체)"와 같이 사용하여 해당 Iterable 객체의 Iterator를 리턴한다. Iterator 객체의 next 메서드를 사용하면 다음 요소를 가져올 수 있고 만약 next요소가 없으..