본문 바로가기

전체 글

(65)
Overriding, Overloading 자바로 프로그래밍을 하다보면 Overriding과 Overloading이라는 키워드를 마주치게 된다. Override 우선 Override란 자식 클래스에서 부모 클래스가 가진 기능에 무언가를 보태어 같은 이름으로 재정의할 때 사용하는 기능이다. 상속(inheritance)에서 사용되는 개념이다. 상속은 일반적으로 좀 더 추상적인 부모 클래스(superclass)와, 그 부모 클래스를 답습한 더 구체적인 자식 클래스(subclass)로 구분된다. 부모 클래스가 가지고 있는 기능을 마냥 답습하기만 하는 자식 클래스라면 굳이 만들 필요가 없다. 이때 부모 클래스가 가진 기능이지만 더 보태서 같은 이름으로 다시 재정의하는 것을 Override라고 하는 것이다. class Calculator { public i..
생성자(constructor)와 this 클래스는 인스턴스를 생성할 때 클래스의 이름과 같은 이름인 생성자(constructor)로 인스턴스를 만든다. 클래스는 따로 만들어 주지 않아도 기본 생성자를 포함하고 있다. 아무것도 지정하지 않는 생성자를 기본 생성자라고 한다. 기본적으로 public 권한으로 설정되어 있어서 따로 명시하지 않아도 클래스를 만들게 되면 새로운 인스턴스를 생성할 수 있도록 만든다. 만약 처음에 인스턴스를 생성할 때부터 필드를 초기화하고 싶다면, 필드를 초기화할 수 있게 만드는 생성자를 구성할 수 있다. 생성자는 접근 권한을 설정할 수 있고, 리턴 타입은 명시하지 않으며, 초기화할 필드에 따라 파라미터를 설정한다. import java.io.FileWriter; import java.io.IOException; public..
static 자바를 공부하다보면 자주 보이는 것이 있다. 바로 static이다. public class Practice { public static void main(String[] args) { System.out.println("a"); } } 거두절미하고, static이란 static - class method no static - instance method 이다. 즉, 메소드를 정의할 때 static이라는 키워드를 쓰면 그 메소드는 클래스 소속이고, static이라는 키워드를 쓰지 않으면 그 메소드는 인스턴스의 소속이라는 것이다. static 메소드는 클래스의 메소드로, 프로그램에서 한 번만 정의된다. 여러 개 가질 수 없는 유일무이한 메소드이다. 반면 static이 아닌 메소드는 인스턴스의 메소드로, 프로..
접근 제어자 (access level modifiers) 자바로 프로그램을 만들다 보면 public이라는 것을 계속 사용한다. public 은 자바의 접근 제어자(access level modifiers)이다. class Greeting { // public, protected, default, private public static void hi() { System.out.println("Hi"); } } public class AccessLevelModifiersMethod { public static void main(String[] args) { Greeting.hi(); } } 위와 같은 코드가 있을 때, Greeting 클래스 안에 public 메소드 hi를 main 메소드에서 성공적으로 불러올 수 있다. 왜냐하면, hi는 Greeting 클래스 밖..
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 * ..