본문 바로가기

JAVA/JAVA 기초

(16)
자바 코딩의 기술 - #7 객체 디자인 불 매개변수로 메서드 분할 일반적으로 메서드는 하나의 작업에만 특화되어야 한다. 불 메서드 매개변수는 메서드가 적어도 2가지 작업을 수행함을 뜻한다. class Logbook { private final Path CAPTAIN_LOG = Paths.get("/var/log/captain.log"); private final Path CREW_LOG = Paths.get("/var/log/crew.log"); void log(String message, boolean classified) throws IOException { if (classified) { writeMessage(message, CAPTAIN_LOG); } else { writeMessage(message, CREW_LOG); } } vo..
병렬 프로그래밍 병렬 프로그래밍 여러가지 일을 동시에 처리하기 위한 기법은 크게 병행(Concurrency), 병렬(Parallel) 그리고 분산(Distribute)으로 구분한다. 병행은 하나의 CPU 코어에서 소프트웨어적인 기법으로 동시에 여러 작업을 교차하면서 실행하는것. (프로그램 성질) 병렬은 여러 개의 코어에 작업을 배분해서 동시에 작업을 실행하는 것. (기계적인 특징) 멀티코어 환경에서 병렬과 병행 작업이 동시에 일어난다. 작업이 여러 코어에 배분될뿐만 아니라 하나의 코어에서 여러 작업이 병행해서 동작한다. 컨커런트 API 웹 기반 개발이 일반화 되면서 멀티 스레드 프로그래밍이 강조 되었다. 컨커런트 API가 멀티 스레드 모델보다 개발이 좀 더 쉽긴 하지만 멀티 스레드를 대체하기 위한 것은 아니다. 데몬 프..
자바 코딩의 기술 - #2 코딩 스타일 2.1 매직 넘버를 상수로 대체 void setPreset(int speedPreset) { if (speedPreset == 2) { setTargetSpeedKmh(16944); } else if (speedPreset == 1) { setTargetSpeedKmh(7667); } else if (speedPreset == 0) { setTargetSpeedKmh(0); } } 변경 static final int STOP_PRESET = 0; static final int PLANETARY_SPEED_PRESET = 1; static final int CRUISE_SPEED_PRESET = 2; static final double STOP_SPEED_KMH = 0; static final double..
자바 코딩의 기술 - #1 코드 정리 1.1 쓸모없는 비교 피하기 if(microscope.isInorganic(sample) == true) 변경 if(microscope.isInorganic(sample) 불 표현식은 불 원시값과 비교하지 않아도 된다. 1.2 부정피하기 if(!microscope.isHumanoid(sample)) { retrun Result.ALIEN; } else { retrun Result.HUMANOID; } 변경 if(microscope.isHumanoid(sample)) { retrun Result.HUMANOID; } else { retrun Result.ALIEN; } 코드를 읽을때 일반적으로 긍정 표현을 이해하기가 더 쉽다. 1.3 boolean 표현식을 직접 반환 boolean isValid() { i..
자바 코딩 규약 자바 코딩 규약 https://www.oracle.com/technetwork/java/codeconventions-150003.pdf 네이밍 규약 - 메서드명은 소문자로 시작하는 동사여야하고 여러단어로 구성되면 두번재 이후 단어는 대문자로 시작한다. 다만, 모든 소스 코드가 이런 자바 코딩 규악을 따르는 건 아니다. 개발할때는 개발자끼리 코딩규약을 정한 후 소스 코드를 공유하는게 좋다.
Object의 clone() 복사 Object 클래스의 clone() 함수 implements의 Cloneable으로 구현하고Object의 clone() 함수를 재정의 한다. package clone; public class MyValue implements Cloneable{ private String name; private int age; public MyValue(String name, int age) { this.name = name; this.age = age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "MyValue{" + "name='" + name + '\'' + ", age=" + age + '..
객체의 라이프 사이클 객체의 라이프 사이클자바의 객체의 생존 기간을 라이프 사이클이라고 한다.객체가 생성된 후부터 폐기될 때 까지의 기간을 뜻한다. 1) 로컬변수로컬변수는 처리 블록 내에서만 사용할 수 있는 변수변수를 선언한 곳에서 생성되어 블록이 종료한 시점에서 폐기된다. 2)인스턴스 변수클래스의 필드로 선언하는 변수 부모 객체를 생성할 때 생성되어 부모 객체가 가비지 컬렉션될 때 함께 삭제된다. 3)클래스 변수클래스의 static 필드로 선언한 변수자바의 변수 중 가장 긴 라이프 사이클클래스 로드시에 생성되어 클래스가 언로드되면 소멸된다.대부분의 경우 자바의 프로세스 시작시에 생성되어 프로세스 종료시 삭제된다.또한, 인스턴스 변수와 클래스변수에는 가시성을 지정할 수 있다. public class LifeCycleSampl..
가시성 자바의 변수와 메서드를 사용할 수 있는 범위를 가시성이라고 한다.public - 모든 클래스로부터 이용할 수 있다.protected - 서브 클래스, 동일패키지의 클래스가 이용할 수 있다.package private (지정없음)- 동일 패키지의 클래스로부터 이용할 수 있다.private - 자신의 클래스만 이용할 수 있다. 사용가능범위가 좁여진다. 클래스나 인터페이스에 대해서는 public, package private 중 하나만을 사용할 수 있다.메서드와 필드는 public, protected, package private, private 사용할 수 있다. protected 메서드는 '파생 클래스라면 다른 패키지에 속해도 참조가 가능'하다는 의미다. 또한 클래스 자신도 접근 제한자를 가질 수 있어 멤버..