분류 전체보기
-
프로세스(Process)와 스레드(Thread)백수의 개발/운영체제 2019. 10. 26. 13:46
자네, 프로세스와 스레드의 차이에 대해 설명해보게! 프로세스, 스레드 다 자주 듣고, 사용해봤을 용어들이다. 그런데 막상 각자의 정의와 차이를 설명하라고 한다면 설명하는게 쉽지 않을 수 있다. 오늘은 프로세스와 스레드에 대해서 정리를 해보려 한다. 프로세스(Process) 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 운영체제로부터 시스템 자원을 할당받는 작업의 단위 실행된 프로그램을 의미 특징 프로세스는 각각 독립된 메모리 영역을 할당받는다. 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원..
-
Item 27. 비검사 경고를 제거하라백수의 개발/이펙티브 자바 2019. 10. 15. 12:19
비검사 경고 제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게된다. 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등이다. 대부분의 비검사 경고는 쉽게 제거할 수 있다. 아래의 코드를 살펴보자. Set exaltation = new HashSet(); 이를 컴파일하면 컴파일러는 무엇이 잘못됐는지 친절히 설명해준다. warning: [unchecked] unchecked conversion Set exaltation = new HashSet(); ^ required: Set found: HashSet 아래처럼 컴파일러가 알려준 대로 수정하면 경고가 사라진다. Set exaltation = new HashSet(); 이와 달리 제거하기 훨씬 어..
-
Item 26. 로 타입은 사용하지 말라백수의 개발/이펙티브 자바 2019. 10. 14. 12:32
제네릭 타입 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭 타입이라 한다. 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 예컨데 List를 선언할 때 List은 원소의 타입이 String인 리스트를 뜻하는 매개변수화 타입이다. 여기서 String이 정규 타입 매개변수 E에 해당하는 실제 타입 매개변수다. 그러나, 로 타입은 List와 같이 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을 때를 말한다. 제네릭이 도래하기 전 코드와의 호환성을 위해 남겨둔 것이다. 로 타입의 문제 private final Collection stamps= ...; stamps.add(new Coin(...)); ..
-
Item 25. 톱레벨 클래스는 한 파일에 하나만 담으라백수의 개발/이펙티브 자바 2019. 10. 13. 12:09
다중 톱레벨 클래스 정의 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 컴파일을 하는데 아무런 문제는 없다. 그러나 이러한 방식은 아무런 득이 없을 뿐더러 심각한 위험을 감수해야하는 행위이다. 이는 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문이다. 간단한 예를 보자. public class Main { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); } } // Utensil.java class Utensil { static final String NAME = "pan"; } class Dessert {..
-
Item 24. 멤버 클래스는 되도록 static으로 만들라백수의 개발/이펙티브 자바 2019. 10. 12. 12:39
중첩 클래스 정의 다른 클래스 안에 정의된 클래스 종류 정적 멤버 클래스 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다.(나머지는 일반 클래스와 동일) private로 선언하면 바깥 클래스에서만 접근 가능하다. 흔히 바깥 클래스와 함께 쓰일 때만 유용한 public 도우미 클래스로 쓰인다. (비정적) 멤버 클래스 비정적 멤버 클래스의 인스턴스는 바깥 클래스의 인스턴스와 암묵적으로 연결된다. 개념상 중첩 클래스의 인스턴스가 바깥 인스턴스와 독립적으로 존재할 수 있다면 정적 멤버 클래스로 만들어야 한다. 드물게 .new MemberClass()를 통해 인스턴스를 만들기도 한다. 비정적 멤버 클래스는 어댑터를 정의할 때 자주 쓰인다. 멤버 클래스에서 바깥 인스턴스에 접근할 ..
-
Item 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라백수의 개발/이펙티브 자바 2019. 10. 11. 20:15
태그 달린 클래스 class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 다음 필드는 모양이 원(CIRCLE)일 때만 쓰인다. double radius; // 원용 생성자 Figure(double radius) { shape = Shape.CIRCLE; this.radius = radius; } // 사각형용 생성자 Figure(double length, double width) { shape = Shape.RECTANGLE; this.length = length; thi..
-
바이크 악세사리 - 러버덕 & 프로펠러백수의 라이딩 2019. 10. 10. 12:59
핸들에 프로펠러가 달린 러버덕을 달고 다니는 바이크 유튜버분을 봤다. 러버덕도 너무 귀엽고, 프로펠러가 힘차게 도는걸 보고 또 뽐뿌가 와버렸다. 그렇게 인터넷에 검색해보니까 러버덕에 원하는 헬멧을 골라서 구매할 수 있었다. 다양한 헬멧들이 있고, 내가 산 곳 말고 다른 곳에서는 또 다른 헬멧들이 있었나. 나는 개인적으로 스파이더맨을 사고 싶었는데 품절이었다... 아쉽지만 그냥 아이언맨(블랙)이 나름 간지나보여서 이걸로 구매해버렸다. 배송도 하루만에 금방와서 신나는 마음에 바로 장착하러 갔다. 구성품은 간결하게 러버덕, 프로펠러 달린 헬멧이었다. 바로 바이크 핸들에 창착하니까 너무 귀여웠다. 만 - 족 달릴 때 프로펠러가 열심히 돌아가는게 핵심인데 크... 너무 만족한다. 바이크가 아니더라도 자전거달아두면..
-
바이크 악세사리 - 코스베이비 스파이더맨백수의 라이딩 2019. 10. 9. 12:41
근래에 도로에 토이스토리나 스파이더맨 인형같은걸 붙인 자동차들을 많이 볼 수 있다. 나의 허전한 오토바이에도 생기를... 뽐뿌가 와서 어떤걸 붙일지 이것저것 찾아봤다. 개인적으로 톰홀랜드의 스파이더맨을 좋아해서 스파이더맨을 인형들을 찾고 있었는데 너무 귀여운 스파이더맨을 찾았다. 메인에 조그만 스파이더맨 3개가 저렇게 있는데 너무 귀여워보여서 바로 구매해야겠다 싶었다. 종류가 굉장히 많았다. 저기서 왼쪽 천으로 된거랑 오른쪽 반짝반짝한거랑 고민을 많이 했는데 천으로 되있는게 더 심플하고 무난해 보였다. 그 중에서 오토바이 박스에 붙이기에 C, H, G, B 딱 좋아보였다. 그렇게 고민하다가 제일 첨에 눈에 띄었돈 C를 선택하기로 했다. 하나에 13,000원 정도에 배송비가 따로 붙는다. 4개 세트나, 8..