본문 바로가기

전체 글

(65)
상속 (Inheritance) 클래스 간에는 서로 계층적인 관계를 갖고 있을 수 있다. 가령 PrintWriter 객체의 설명서를 보면 아래와 같이 나타나 있다. 들여쓰기되어 표현된 각각의 클래스 간의 관계는 상속 관계를 나타낸다. PrintWriter 클래스는 Writer 클래스에서 상속을 받았고, Writer 클래스는 Object 클래스로부터 상속을 받았다는 것을 나타낸다. 자식에 해당하는 클래스는 부모에 해당하는 클래스의 모든 변수와 메소드를 사용할 수 있다. 이클립스 안에서 Open Type Hierarchy를 이용하여 클래스의 상속관계를 확인할 수 있다. PrintWriter는 Writer를 확장해서 만들어진 클래스이고, Writer는 Object를 확장해서 만들어진 클래스이다. 이것은 'extends ~'를 이용해서 표현한..
인스턴스 인스턴스는 클래스를 컴퓨터 상에서 실체화한 것이다. import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; public class InstanceApp { public static void main(String[] args) throws IOException{ PrintWriter p1 = new PrintWriter("result1.txt"); p1.write("Hello 1"); p1.close(); PrintWriter p2 = new PrintWriter("result2.txt"); p2.write("Hello 2"); p2.close(); } } 가령 PrintWriter 객체를 사용..
패키지, 클래스, 변수, 메소드 간 관계 가령 Math 클래스와 같이 클래스 안에는 PI와 같은 변수, floor, ceil과 같은 메소드들이 포함되어 있다. 즉 클래스(Class)란 서로 연관된 변수와 메소드들을 모아서 이름을 붙인 것이다. 패키지는 이러한 클래스(들)을 하나의 묶음으로 정리한 것이다. 자바 프로그램을 만들기 위해서는 자바의 도구들을 사용할 수 있게 만든 장치인 자바 API를 이용한다. 오라클에서는 자바 API의 설명서인 Java API documentation을 제공하고 있다. 가령 Math 클래스의 설명서를 보면 java.lang 패키지에 속해 있다는 것을 알 수 있다. java.lang 패키지에는 Math 외에 String과 같은 다른 객체들도 존재한다. Math 클래스에는 PI와 같은 변수(Variable/Field)들..
자료형의 복사 .copy() 와 .deepcopy() a = 3 b = a b = b + 1 print(b)# 4 print(a)# 3 위 코드를 보면, 특별히 문제가 없어 보인다. 그런데, a = [1, 2, 3, 4] b = a b[2] = 0 print(b)# [1, 2, 0, 4] print(a)# [1, 2, 0, 4] a를 리스트로 선언하면 b의 세 번째 값을 변경했을 때 a도 같이 변경된다. 앞의 예시처럼 a 따로, b 따로 변동된 사항이 적용되는 것이 아닌 것이다. list, dictionary, set 등 mutable 한 속성을 가진 것들은 이처럼 처음에 같은 데이터를 가리키고 있었다면 하나를 변경했을 때 다른 것도 같이 변한다는 특징을 가진다. 이러한 현상을 방지하고 싶다면, 자료형의 복사를 해야 한다. a = [1, 2, 3, 4, 5..
문자열 포매팅 파이썬에서는 문자열 포매팅을 사용한다. A = "현재 시간은 {}시 입니다.".format(7) 이렇게 할 수도 있고, B = "현재 시간은 %d시 입니다." % 8 이렇게 할 수도 있다. 전자가 현업에서 더 많이 쓰인다고 한다. 두 번째 방법을 사용하려면, %d : 정수 %s : 문자열 %f : 실수 %o : 8진수 %x : 16진수 를 참고하고 넣으려는 값의 자료형에 맞게 입력해야 한다. 두 개 이상의 값을 문자열 포매팅 하려면, C = "현재 시간은 {}시 {}분 입니다.".format(7, 24) 의 방식으로 하면 된다. 괄호 안에 들어가는 값을 구체적으로 명시하고 싶다면, D = "현재 시간은 {time}시 {minute}분 입니다.".format(time = 7, minute = 24) 로 하..
부동 소수 print(0.1 + 0.2) 위 코드의 결과를 우리는 0.3 을 예상한다. 하지만 실제로는 0.30000000000000004 라는 기괴한 값이 나온다. 이것은 컴퓨터가 '부동 소수점' 이라는 방식을 채택하고 있기 때문이다. 부동 소수점(floating point) 방식이란 실수를 컴퓨터 상에서 표현할 때 근사하는 방식의 하나로, 컴퓨터 상에서 넓은 범위의 수를 나타내는데 유리하지만 실수를 정확히 표현할 수 없다는 단점이 있다. 단, 실제 값과의 차이가 항상 10의 -15제곱(시스템에 따라 약간 다를 수 있다)보다 작게 되므로 소수점 특정 자리수 까지만 비교하면 된다. 컴퓨터는 실수를 저장할 때 값을 그대로 저장하는 것이 아니라, '부동 소수점 방식'이란 것을 통해 근삿값을 저장한다. 그러다 보니, 0..
JVM이란 무엇인가 JVM이란? JVM이란 Java Virtual Machine, 자바 가상 머신의 약어이다. (가상머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어들여 자바 API와 함께 실행하는 것이다. 그리고 JVM은 Java와 OS 사이에서 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용을 가능하게 해준다. 그리고 가장 중요한 메모리관리, Garbage collection을 수행한다. 그리고 JVM은 스택 기반의 가상머신이다. ARM 아키텍쳐 같은 하드웨어는 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다. JVM(자바 가상 머신)을 알아야 하는 이유는, 한정된 메모리를 효율적으로..
자바의 동작 원리 자바 소스(Source)가 프로그램으로서 동작하는 과정은 다음과 같다. 우선 java 파일의 형태로 소스 코드를 작성하면, 컴파일(compile) 과정을 거쳐 JVM(Java Virtual Machine, 자바 가상 머신)이 알아들을 수 있는 class 파일로 변환된다. 이클립스에서는 자바 파일을 저장할 때 컴파일을 하여 class 파일로 저장한다. ↓ 다음으로, 이클립스에서 실행 버튼을 누르게 되면 JVM에서 class 파일을 읽어들인다. ↓ 마지막으로, JVM은 class 파일을 읽고서 그대로 컴퓨터를 동작시키게 된다. 이때, .java 파일이란 java 규칙에 맞게 작성한 모든 소스코드 파일을 말하며, 특징은 for human 이다. 그렇기에 사람이 읽을 수 있는 text 로 구성되어 있다. 한편,..