객체 지향은 인간 지향이다. 프로그래밍 언어의 발전사를 보면 개발자를 더욱 편하고 이롭게 하기 위한 과정임을 알 수 있다. 기계어에서 어셈블리어, C, C++, 자바로 발전해 온 과정이 기계가 아닌 인간을 배려하기 위한 과정이었던 것이다. 하지만 객체 지향 전까지는 인간이 기계를 이해하려고 노력해야 하는 것에서 벗어나지 못했다. 그래서 "왜 우리가 기계 종속적인 개발을 해야 하는가?"라는 의문점에서 "현실 세계처럼 프로그래밍할 수 없을까?" 라는 고민을 했고, 객체지향의 개념이 탄생하였다. 우리가 주변에서 볼 수 있는 모든 것은 사물이다. 눈으로 보여지는 것도 사물, 손으로 만져지는 것도 사물, 머릿속으로 어떤 것을 상상할 때도 사물을 떠올린다. 이 사물을 멋진말로 객체, 영어로는 Object라고 한다...
자바 프로그램의 개발과 구동 우리는 컴퓨터를 구동하기 위해서는 컴퓨터, 즉 하드웨어와 운영체제, 그리고 그 위에서 구동될 소프트웨어가 필요하다. 그리고 소프트웨어를 개발할 수 있는 개발 도구가 필요하다. 자바는 이러한 과정을 그대로 모방하고 있다. 현실세계 자바 월드 소프트웨어 개발 도구 JDK(Java Development Kit) 운영체제 JRE(Java Runtime Enviorment) 하드웨어(컴퓨터) JVM(Java Virtual Machine) 현실 세계에서 프로그램을 실행하려면 개발 도구로 프로그램을 개발하고, 운영체제를 통해 하드웨어에 구동시킨다. 자바 월드도 마찬가지다. JDK를 이용해 개발된 프로그램을 JRE를 통해서 JVM에서 구동된다. 다음으로 알아볼 것은 자바의 메모리 사용방식이..
전통적인 자바에서 인터페이스와 관련 메서드는 한 몸처럼 구성된다. 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 예를 들어보자. CRUD의 추상메서드를 가지고 있는 인터페이스가 있다. 그리고 위 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그렇게 하지 않으면 오류가 뜰 것이다. 평소에는 이 규칙을 지키는 데 아무 문제가 없지만 라이브러리 설계자 입장에서 인터페이스에 새로운 메서드를 추가하는 등 인터페이스를 바꾸고 싶을 때는 문제가 발생한다. 위 예제를 다시 들어 나는 CRUD 인터페이스를 설계한 설계자이다. 어느 날 나는 CRUD 인터페이스에 제목으로 검..
1. 사람들이 Optional 쓰는 방법 Optional이 나온 이유부터 알아보자. 이유를 모르고 쓰는 사람들은 이렇게 말한다. "null을 반환하면 그 무서운 NPE가 뜨기 때문에, Optional로 null을 가지는 변수, 또는 객체를 Optional로 묶어요. 그럼 NPE가 안떠요" 자바로 개발하면서 한 번이라도 NullPointerException을 겪은 사람은 손을 들어보자. NPE는 다양한 예외 중에서도 가장 악질로 유명한 예외이다. 그렇기에 NPE를 피하기 위해서 Optional을 사용하는 사람은 드물지 않을 것이다. 하지만 당연히 Optional이 나온 이유는 NPE를 피하기 위함이 아니다. 그럼 NPE가 얼마나 무섭길래 Optional을 쓰는 이유를 모르면서까지 Optional을 쓰며 피..
1. 추상클래스란 ? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라 미완성 메서드(추상메서드)를 포함하고 있다는 의미이다. 추상클래스는 인스턴스를 생성할 수 없으며, 상속을 통해 자손클래스에 의해서만 완성될 수 있다. 한마디로 일반클래스에서 추상메서드를 포함한 클래스를 추상클래스로 부른다. 추상클래스는 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서의 중요한 의미를 갖는다. 아무것도 없는 상태에서 새로운 클래스를 만드는 것보다는 어느 정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다. 2. 추상 클래스 작성 방법 추상클래스는 abstract를 붙이기만 하면 된다. 이렇게 함으로써 이 클래스를 사용하려..
객체지향개념에서 중요한 특징 중 하나인 다형성에 대해서 알아보겠다. 다형성은 상속과 깊은 관계가 있어 상속에 대해 충분히 알고 있어야 한다. 1. 다형성이란 ? 프로그램적으로 말하자면 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것이다. 2. 다형성의 조건 사실 다형성에 조건은 없지만 허용되는 것과 허용되지 않는 것들이 있다. 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다. 자손 타입의 참조변수로 조상타입의 인스턴스를 참조할 수 없다. 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다. 이 세가지는 알고보면 다 같은 말이다. 참조변수가 사용하는 멤버의 개수가 인스턴스 멤버 개수보다 많다고 했을 때, 인스턴스 멤버에는 존재하지 ..
1. 오버로딩이란 ? 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩' 또는 간단히 '오버로딩'이라고 한다. 2. 오버로딩의 조건 같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니다. 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야한다. 메서드 이름이 같아야 한다. 매개변수의 개수 또는 타입이 달라야 한다. 위의 조건을 만족하지 못한 메서드는 중복으로 컴파일 에러가 발생한다. 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 아무런 영향을 주지 못한다. 간단히 말하면 이름은 같지만 매개변수가 다르면 된다. 3. 오버로딩의 예 오버로딩의 예로 가장 대표적인 것이 println메서드이다. 지금까지 아무런 생각없이 출력으로만 써왔다..
자바를 공부하고 스프링으로 넘어갈 때, 스프링에서 나오는 자바 문법과 개념에 대해서 한번 더 확실하게 정리를 하면 기억에 잘 남을거 같아 적는다. 자바 문법은 다 안다고 치고 객체지향부터 알아보겠다. 이 글을 보면서 부가적인 내용들도 중요하지만 단어의 의미에 좀 더 집중해서 봤으면 한다. 1. 객체지향 언어 란 ? 객체지향이란 말은 많이 들어봤으나 의미를 말하려 하면 생각이 나지 않는 경우가 많다. 객체지향언어는 완전히 새로운 프로그래밍이 아니라, 기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 형태이다. 이러한 규칙을 이용해서 코드 간의 서로 관계를 맺어 유기적으로 프로그램을 구성하는 것이 가능하다. 객체지향언어의 주요 특징은 다음과 같다. 1-1. 코드의 재사용성이 높다. 새로운 코드를 작성할 ..
- Total
- Today
- Yesterday