개발 일지/Java 54

[Java] Object 클래스

Object 클래스는 자바의 클래스 상속계층도에서 최상위에 위치한 상위 클래스이다. 따라서 '자바의 모든 클래스는 Object 클래스로부터 확장된다'는 명제는 항상 참이다. Object 클래스는 필드가 없고 메서드로 구성되어 있다. 이 메서드들은 모든 클래스들이 Object를 상속하므로, 모든 클래스에서 용할 수 있다. 자바 컴파일러는 컴파일 과정에서 다른 클래스로부터 아무런 상속을 받지 않는 클래스에 자동적으로 extends Object를 추가하여 Object 클래스를 상속받도록 한다. class Example {// 컴파일러가 자동으로 extends Object 추가 } Object 클래스의 대표적인 메서드 toString() : 객체 정보를 문자열로 출력 equals() : 등가 비교 연산(==)과..

개발 일지/Java 2022.12.29

[Java] super과 super()

super 키워드와 super() 메서드는 this 키워드와 this() 메서드의 관계와 비슷하다고 할 수 있다. super 키워드는 상위 클래스의 객체, super() 메서드는 상위 클래스의 생성자를 호출하는 것을 의미한다. 여기서, 모두 상위 클래스의 존재를 상정하며 상속 관계를 전제로 한다. super public class HelloJava { public static void main(String[] args) { SubClass subClassInstance = new SubClass(); subClassInstance.callNum(); } } class SuperClass { int count = 1; } class SubClass extends SuperClass { int count =..

개발 일지/Java 2022.12.29

[Java] 메서드 오버라이딩(Method Overriding)

메서드 오버라이딩(method overriding)은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것을 의미한다. Override의 사전적 의미가 '~위에 덮어쓰다'를 의미한다는 것을 생각해보면 이해하기 쉽다. 상위 클래스의 메서드를 오버라이딩하려면 다음 세 가지 조건을 반드시 만족시켜야 한다. 메서드의 선언부(메서드 이름, 매개 변수, 반환 타입)이 상위 클래스의 그것과 완전히 일치해야 한다. 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다. 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다. public class HelloJava { public static void main(String[] args) { Dog dog = new Dog(); Cat c..

개발 일지/Java 2022.12.29

[Java] 상속/포함 관계

자바에서 포함(composite)은 상속과 비슷하게 클래스를 재사용할 수 있는 방법으로, 클래스의 멤버로 다른 클래스 타입의 참조 변수를 선언하는 것을 의미한다. 즉, 클래스의 속성 값에 다른 클래스를 선언하여 사용하는 것이다. class Circle { int x; // 원점의 x좌표 int y; // 원점의 y좌표 int r; // 반지름 } 여기서 상속과 포함은 구조상의 차이가 있다. class Point { int x; int y; } class Circle1 extends Point { // 상속 관계 int z; } class Circle2 { // 포함 관계 Point p = new Point(); int z; } 위 코드에서, 상속은 extends 키워드를 통해 상위 클래스를 상속받고 포함..

개발 일지/Java 2022.12.29

[Java] 상속(Inheritance)

java 언어에서 상속이란, 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소이다. 객체가 정의되는 고전 상속에서, 클래스는 기존의 클래스로부터 속성과 동작을 상속받을 수 있다. 가장 단순한 형태로 생각해본다면, 두 클래스를 상위 클래스와 하위 클래스로 나눠서 상위 클래스의 멤버(필드, 메서드, 이너 클래스)를 하위 클래스와 공유하는 것이다. 여기서 두 클래스를 서로 상속 관계에 있다고 하고 하위 클래스는 상속 클래스가 가진 모든 멤버를 상속받게 된다. 예를 들어, 여러 사람의 클래스를 정의한다고 생각해보자. /* class 가수 { 숨쉬기 잠자기 밥먹기 노래하기 } class 학생 { 숨쉬기 잠자기 밥먹기 공부하기 } */ 가수와 학생은 많은 공통점을 갖고 있는 것을 볼 수 있다. ..

개발 일지/Java 2022.12.29

[Java] 내부 클래스(Inner Class)

내부 클래스(inner class)는 클래스 내에 선언된 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 내부 클래스를 사용하면 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있고, 외부에서 내부 클래스에 접근이 안되기 때문에 코드의 복잡성을 줄일 수 있다는 장점이 있다. 또한, 외부적으로 불필요한 데이터를 감출 수 있어 객체 지향의 중요한 핵심 원칙인 캡슐화(encapsulation)를 달성하는 데 유용하다. class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } } }..

개발 일지/Java 2022.12.28

[Java] this 와 this()

this 키워드와 this() 메서드는 매우 유사하게 생겼지만 쓰임새는 전혀 다르다. 간단하게 본다면 this 키워드는 '인스턴스 자신을 가리키는 참조 변수, this() 메서드는 생성자라고 할 수 있다. this this 키워드는 생성자의 매개변수로 선언된 변수의 이름이 인스턴스 변수와 같을 때, 인스턴스 변수와 지역변수를 구분하기 위해 사용된다. 모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조 변수가 있는데 일반적인 경우에는 컴파일러가 'this.'를 추가해주기 때문에 생략하는 경우가 많다. 예를 들어, Example 클래스의 questionName 이라는 인스턴스 필드를 클래스 내부에 출력하고자 한다면 원래는 System.out.println(this.questionName..

개발 일지/Java 2022.12.28

[Java] 생성자(Constructor, ctor)

생성자(Constructor)는 객체를 생성하는 역할을 하는 클래스의 구성 요소로서, 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 여기서, 인스턴스 생성을 담당하는 것은 new 키워드이고 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고 필요에 따라 자원을 할당하기도 한다. 객체의 생성 시에 호출되기 때문에 생성자라는 이름이 붙었다. 생성자는 메서드와 비슷한 구조를 갖고 있지만 크게 두 가지 부분에서 차이를 가진다. 생성자의 이름은 반드시 클래스의 이름과 같아야 한다. 만약 클래스 이름과 생성자의 이름이 다르다면 그 메서드는 더이상 생산자로서의 기능을 수행할 수 없다. 생상자는 리턴 타입이 없다. 하지만 메..

개발 일지/Java 2022.12.28

[Java] 메서드 오버로딩(Method Overloading)

메서드 오버로딩(Method Overloading)이란, 같은 이름을 갖고 있지만 서로 다른 매개변수 형식을 갖고 있는 메서드를 여러 개 정의하는 것이다. 즉, 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것이다. 여기서 'overload'의 사전적 의미는 '과적하다/ 부담을 지우다'이다. 메서드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나이다. 오버로딩이 성립하기 위한 조건 무조건 같은 메서드명을 사용한다해서 오버로딩이 되는 것은 아니다. 다음은 오버로딩이 성립하기 위한 조건이다. 메서드의 이름이 같아야 한다. 메서드의 시그니처 즉, 매개 변수의 개수 또는 타입이 다르게 정의되어야 한다. 이 조건들 중에 하나라도 충족이 되지 ..

개발 일지/Java 2022.12.27

[Java] 메서드(Method)

메서드(Method)는 java를 포함한 객체 지향 프로그래밍 언어에서 클래스 내부에서 정의된 함수(객체의 함수)를 말한다. '특정 작업을 수행하는 일련의 명령문들의 집합'을 의미하며, 클래스의 기능에 해당하는 내용들을 담당한다. 메서드는 크게 머리에 해당하는 메서드 시그니처(method signature)와 몸통에 해당하는 메서드 바디(method body)로 구분할 수 있다. 자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처 메서드 내용// 메서드 바디 } 메서드 시그니처는 자바 제어자, 반환타입, 메서드명 그리고 매개 변수로 이루어져 있다. 즉, 해당 메서드가 어떤 타입을 반환하는가, 메서드 이름은 무엇이며 해당 작업을 수행하기 위해서 어떤 재료들이 필요한지에 대한 정보를 포함하고 ..

개발 일지/Java 2022.12.27