본문 바로가기

Language

(28)
main 메소드 자바 애플리케이션을 만들 때에는 클래스(Class)를 만들어야 하고, 그 클래스를 실행시킬 때에는 반드시 약속된 이름인 'main'이라고 하는 특수한 이름의 메소드를 정의해 놓아야 한다. 자바는 main이라는 메소드를 실행하도록 약속되어 있다. public class FirstMethod { public static void main(String[] args) { System.out.println("Hello Method"); System.out.println(Math.floor(1.1)); } } 위 코드에서처럼, 실행되었으면 하는 명령어들을 main 메소드 안에 위치시켜야 하는 것이다.
== vs equals 자바에는 여러가지 데이터 타입이 존재한다. 이 여러가지 데이터 타입을 primitive냐 아니냐의 기준으로 구분할 수 있다. 자바에서 기본적으로 다루는 데이터 타입은 원시 데이터 타입(primitive data type)이라고 부른다. 원시 데이터 타입의 변수는 선언되면 메모리(Stack)에 공간이 할당되며, 그 메모리 공간 안에 실제 값이 들어가게 된다. int a = 1; int b = 1; System.out.println(a == b);// true // System.out.println(a.equals(b));// 원시 데이터 타입은 equals 메소드 사용 불가 그래서 위 코드와 같이 원시 데이터의 경우 == 연산자는 변수가 가리키는 값을 토대로 비교하게 된다. 반면 java.lang.Obje..
클래스 (Class) 클래스(class)란 서로 연관된 변수와 메소드를 묶어 놓고 거기에 이름을 붙인 것이다. 메소드, 클래스가 중요한 이유는 우리가 소프트웨어를 만들어가는 데에 있어 구조를 결정하기 때문이다. 마치 신체에서 뼈대와 같은 역할을 하는 것이 메소드와 클래스이다. 클래스를 잘 활용하면 코드를 정리하고 프로그램의 생산성을 높일 수 있다. 가령 이렇게 회계와 관련된 코드가 있다고 할 때, public class AccountingClassApp { public static double valueOfSupply; public static double vatRate; public static double expenseRate; public static void main(String[] args) { valueOfSupp..
메소드 (Method) 메소드(method)란 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자이다. 메소드는 클래스의 동작을 나타내는 함수이다. 이전에 다루었던 Math의 floor, ceil 혹은, PrintWriter의 write, close 등이 메소드이다. public class AccountingApp { public static void main(String[] args) { double valueOfSupply = 10000.0; double vatRate = 0.1; double expenseRate = 0.3; double vat = valueOfSupply * vatRate; double total = valueOfSupply + vat; double expense = valueOfSupply * ..
상속 (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..