일반적으로 java에서는 c, c++에서와 달리 따로 메모리를 해제해주지 않는다고 하더라도 자동적으로 메모리를 해제해준다.하지만 stack과 같이 memory allocation이 해야하는 일이 많아지거나 하는 경우 성능 저하를 일으키거나 메모리 요구량이 증가할 수 있음.극단적인 경우 disk paging 혹은 outofmemoryError가 발생하면 프로그램이 강제 종류 될 수 있음. 객체를 null로 만드는 것이 가장 쉬운 방법but, 프로그램이 난잡해질 수 있기 때문에 예외적인 조치를 하는 것이 좋음.따라서 변수의 유효 범위를 최대한 좁게 만들면 해결 가능. 일반적으로, 자체적인 메모리 관리를 하는 클래스의 경우 memory leak이 발생하지 않도록 주의 필요.cache의 경우에도 Memory l..
All
String s = new String("abc"); 이 구문의 경우 abc라는 정보를 가진 객체를 생성하는 것이 구문이 loop안 에 있는 경우 loop의 횟수만큼 객체가 생성되기 때문에 매우 위험한 구문String s = "abc";
객체를 만들 수 없도록 하기 위해 class를 abstract로 선언해 봤자 소용 없음.private 생성자를 class에 넣게 되면 객체 생성을 미연에 방지할 수 있음.사용법public class testClass{ private testClass(){throw new AssertionError(); }} 이렇게 생성하면 하위 클래스의 무분별한 생성도 방지할 수 있음.
싱글턴: 객체를 하나만 만들 수 있는 클래스 클래스를 싱글턴을 만들면 클라이언트를 테스트하기 어려울 수 있음. JDK1.5 이전 싱글턴 구현 방법기본: 생성자는 private 선언, 객체는 static 멤버 이용1. 정적 멤버는 final로 선언- private static final로 생성된 field는 초기화시 한 번만 호출됨2. public으로 선언된 정적 팩터리 메서드 이용- getInstatnce라는 메소드를 이용하여 항상 같은 객체에 대한참조를 반환하도록 함.(이것 이외의 객체 생성 불가) 팩터리 메서드 사용시 장점1. api를 변경하지 않고도 싱글턴 패턴을 포기하는 것이 가능- 스레드마다 별도의 객체를 반환하도록 팩터리 메서드 수정하는 것도 간단2. 제네릭 타입 수용이 쉬움(규칙 27)- 하..
인자가 많은 클래스의 경우 전진적인 생성자를 이용해서 클래스를 생성할 수 있음 class A{ A(){} A(int a){}; A(int a, int b){}; A(int a, int b, int c){}...} 인자가 많을 경우 인자 별로 생성자를 생성해주어야 함.이 때 인자를 주는 순서가 달라지면 오류가 발생하기 때문에 주의할 필요성이 생김(코딩이 어려움 및 해석이 어려운 코드의 생성) Setter getter 이용시 일시적으로 code의 일관성이 깨어져버리는 결과가 발생- 매번 setting 시 일관성이 깨짐 Builder에 정의된 method는 builder 내부에서 사용하면 됨.
Class 정의시 방법1. 생성자 생성2. 멸도로 펙터리 메소드를 이용하여 생성 정적 팩토리 메서드 사용시 장점1. 팩토리 메서드에는 이름이 고유의 이름이 존재하기 때문에 클래스 내부에서 인자 등을 쉽게 확인 가능2. 호출 시 마다 새로운 객체를 생헝할 필요 없음3. 반환 값의 하위 자료형의 객체 반환 가능4. 형인자 자료형 객체를 만들때 편함 정적 팩토리 메서드 사용시 단점1. 하위 클래스 생성 불가2. 다른 정적 메서드와 유사 이름 존재시 확인이 어려울 수 있음. 종류1. value of: 인자로 주어진 값과 같은 갓을 찾음2. of : value of를 간단히 만든 것3. getInstance: 인자로 기술된 객체의 반환4. newInstance: 다른 곳에 있는 객체의 반환5. getType: g..
파이썬 패키지 디렉토리 구조game/ __init__.py sound/ __init__.py echo.py wav.py graphic/ __init__.py screen.py render.py play/ __init__.py run.py test.py패키지 구성요소 준비 방법__init__.py를 만들면 된다.이후 set PYTHONPATH 환경 변수에 디렉토리를 추가한다. 패키지 안의 함수 실행방법1. 모듈을 import 하여 실행2. 모듈이 있는 디렉터리까지를 from import 하여 실행3. 모듈의 함수를 직접 import하여 실행__init__.py의 용도패키지의 일부임을 표현(python3.3 부터는 없어도 호환)
모듈이란함수나 변수, 클래스들을 모아놓은 파일다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파이썬 파일들을 말하기도 함 모듈 함수 사용법from 모듈 이름 import 모듈함수 __name__=="__main__"모듈을 바로 호출하는 경우에는 내부 api 출력 안됨사용법: if__name__=="__main__"
class의 구성class Calculator: def __init__(self): self.result = 0 def adder(self, num): self.result += num return self.result cal1 = Calculator()cal2 = Calculator() print(cal1.adder(3))print(cal1.adder(4))print(cal2.adder(3))print(cal2.adder(7)) 객체객체 이름 = class() self 객체... def sum(self, a, b):... result = a + b... print("%s + %s = %s입니다." % (a, b, result))self는 이 서비스에 가입한 사람임을 체크하기 위해 사용_init_ 객체객..
사용자 입력>>> a = input()Life is too short, you need python>>> a'Life is too short, you need python'>>> 프롬프트를 띄워서 사용자 입력>>> number = input("숫자입력")숫자입력 3>>>print(number)3>>> 문자열 띄어쓰기는 콤마 이용>>> print("life", "is", "too short")life is too short>>> for i in range(10):... print(i, end=' ')...0 1 2 3 4 5 6 7 8 9