분류 전체보기

Language/Java

자바 컴파일 과정

자바는 JVM덕분에 OS에 독립적인 특성을 가지고 있다. 그럼 JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 알아보자. 자바 컴파일 순서 개발자가 Java Source (.java)를 작성한다. Java Compiler가 Java Source 파일을 읽어 byte code (.class)로 컴파일한다. 여기서 byte code는 JVM이 읽을 수 있는 코드이다. 컴파일된 byte code를 JVM의 Class Loader에게 전달한다. Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area의 Method Area. 즉, JVM의 메모리에 올린다. Execution Engine은 JVM 메모리에 올라온 byte c..

디자인 패턴/OOP

OOP

소프트웨어 모듈(함수, 클래스)이 가져야 할 3가지 기능은 무엇일까? 필요한 기능이 오류없이 제대로 동작하는 것 변경에 용이한 코드 누가 읽어도 이해하기 쉬운 코드(동작이 우리의 상식 또는 예측에서 크게 벗어나지 않는 코드) 기능을 모듈화하는 이유 모듈의 재사용을 위해서 객체지향 패러다임: 협력, 책임, 역할 도메인: 음료 주문 시스템 협력이란? 협력은 객체 간의 상호작용을 통해서 이뤄진다. 객체 간의 상호작용은 메시지를 통해서만 가능하다. 작은 단위로 쪼개진 기능 목록 주문 받기 주문 결제 금액 계산 커피 제조 커피 전달 책임이란? 협력에 참여하기 위해서 객체가 맡고있는 전체 기능 정의서 작성중..

Language/Java

오버플로우 (overflow)

계산 결과가 최댓값을 넘거나 최솟값보다 작을 경우, 음수는 양수로, 음수로 바뀌는 문제가 발생하는데 이를 오버플로우라고 한다. 1byte가 표현할 수 있는 가장 큰 값은 01111111이다. 여기에 1을 더하면 10000000이 된다. 즉, 부호 비트가 1인 음수가 되게되는데, 이 값을 구하기 위해 -1하고 보수를 취해주면 10000000이 된다. 따라서 10진수로 표현하면 -128이 되는 것이다. 정리하면 1byte로 표현할 수 있는 가장 큰 값은 127이고, 127에 1을 더하면 -128이 된다. 이 현상을 오버플로우라고 한다. 타입의 변환: 자바 강제 형 변환의 문제점 long이 가질 수 있는 가장 큰 값을 2진수로 표현하면, 01111111 11111111 11111111 11111111 1111..

Language/Java

각 타입별 값의 범위

리터럴 값인 숫자 5는 int타입이다. 리터럴 값인 숫자 5L은 long타입이다. byte 크기: 1바이트 값의 범위: -2^(8-1) ~ 2^(8-1)-1 short 크기: 2바이트 값의 범위: -2^(16-1) ~ 2^(16-1)-1 int 크기: 4바이트 값의 범위: -2^(32-1) ~ 2^(32-1)-1 long 크기: 8바이트 값의 범위: -2^(64-1) ~ 2^(64-1)-1 float타입은 4byte 크기의 실수 값을 가질 수 있다. 리터럴 값인 숫자 5.2f는 float 타입이다. double타입은 8byte 크기의 실수 값을 가질 수 있다. 리터럴 값인 숫자 5.2는 double이다. float 크기: 4바이트 값의 범위: (3.4 X 10^-38) ~ (3.4 X 10^38) 지수의..

Language/Java

논리 연산자 &&과 &, ||과 |의 차이

&&과 &, ||과 |의 결과는 같게 나오지만 JVM은 실행을 다르게 한다. &&일 경우에는 앞의 식이 거짓이면 뒤에있는 식은 실행하지 않는다. (한쪽만 거짓이어도 실행할 필요가 없기 때문에) &일 경우에는 앞의 식이 거짓이어도 뒤의 식이 실행된다. ||의 경우에는 앞의 식이 참일 경우에는 뒤의 식이 실행되지 않는다. |가 사용될 경우에는 앞의 식이 참일 경우라도 뒤의 식이 실행된다. 즉, 차이점은 앞의 식의 논리 연산 결과에 따라 뒤에 있는 식을 실행하느냐? 안하느냐?의 차이가 있다. 따라서 결과는 같게 나오지만, 뒤의 식에 수식 등이 들어갈 경우, 수식에 증가, 감소되는 식이 있으면 실행이 되고 안되고에 따라서 문제가 될 수도 있다. boolean 형 타입은 메모리를 얼마나 사용할까? 1byte(8b..

Language/Java

논리 연산자 ^

exclusive-or 또는 XOR 이라고 말한다. 2개의 식의 논리 값이 서로 다를 경우, 참이 된다. 아래의 식이 참이려면 한쪽은 참이고, 한쪽은 거짓이 나와야 한다. a > 10 ^ a < 20 예를 들어, a가 31이라는 값을 가질 경우, true & false가 되니 이때 결과는 참이 나온다. 인용 https://www.youtube.com/watch?v=ndRDxcOnXfw&list=PLHpaQi-LiUCx-vcbcnpU5Tzv2X99WCowN&index=6&ab_channel=%EB%B6%80%EB%B6%80%EA%B0%9C%EB%B0%9C%EB%8B%A8-%EC%A6%90%EA%B2%81%EA%B2%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EB%..

Language/Java

변수와 리터럴

기본형 변수 기본형 변수(primitive type)은 값을 가진다. ex) int - 4byte, short-2byte, long-8byte 기본형 타입은 메모리를 확보하고 그 메모리에 값을 저장한다. 즉, int의 경우에는 메모리의 4byte 공간에 값이 할당된다. 참조형 변수 Book b = new Book();에서 Book 처럼 기본형이 아닌 타입은 모두 참조형(Reference Type)이라고 말한다. 기본형이 아닌 타입은 값을 가지지 않고, 값을 참조하게 된다. 리터럴 int i = 1; 에서 1을 정수 리터럴 1이라고 말한다. 즉, 리터럴이란 변수에 입력되는 값을 말한다. 변수의 초기화 클래스 안에 선언된 변수인 field는 초기화를 하지 않아도 사용이 가능하다. 예를 들어, boolean ..

OS/Linux

$PATH에서 경로 지우기 및 중복 경로 제거

지우고 싶은 경로 제거 PATH=$(REMOVE_PART="지우고 싶은 경로" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"') 중복 경로 찾아서 제거 PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')" 인용 https://wooriel.tistory.com/56 $PATH에서 경로 지우기 / 중복 경로 지우기 Reference: 출처 1, 출처 2 PATH=$(REMOVE_PART="/지우고/싶은/경로" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')..

Language/Java

자바 파일 동작원리

System.out.println("Hello") 의 동작원리 System.out은 System이 가지고 있는 out이라는 의미이다. out 필드라고 한다. 즉, System 클래스가 가지고 있는 out 필드는 PrintStream 타입이고, 이 PrintStream은 다양한 println, print 메서드를 가지고 있다. https://docs.oracle.com/javase/8/docs/api/java/lang/System.html System (Java Platform SE 8 ) Sets the system property indicated by the specified key. First, if a security manager exists, its SecurityManager.checkPer..

책 - 요약 정리/객체지향의 사실과 오해

객체 지도

객체 지향으로 가야하는 이유 객체지향 개발 방법은 안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 지도의 방법과 유사하다. 이것이 객체지향이 과거의 전통적인 방법보다 범용적이고, 재사용성이 높으며, 변경에 안정적인 이유다. 성공적인 소프트웨어들이 지닌 공통적인 특징 훌륭한 기능이 훌륭한 소프트웨어를 만드는 충분조건이라고 한다면, 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건이다. 성공적인 소프트웨어들이 지닌 공통적인 특징은 훌륭한 기능을 제공하는 동시에 사용자가 원하는 새로운 기능을 빠르고, 안정적으로 추가할 수 있다는 것이다. 미래에 대한 대비 미래의 변경을 예측할 수는 없다. 단지 대비할 수 있을 뿐이다. 미래에 대비하는 가장 좋은 방법은 변경을 수용할 수 있는 선택의 여지를 설계..

kimjingyu
'분류 전체보기' 카테고리의 글 목록 (12 Page)