본문 바로가기

TIL/☕️ JAVA

(8)
BufferReader에서 readLine() 입력 시, 왜 IOException을 던져줘야 하나요? 보호되어 있는 글입니다.
TDD 방식으로 입출력 만들기 보호되어 있는 글입니다.
TDD 방식으로 자바 연습하기 보호되어 있는 글입니다.
Equals()와 == 연산자 객체를 비교하는 equals()와 == equals() 와 == 는 객체를 비교하는 데 사용된다. 하지만 두 연산자는 서로 다른 방식으로 동작한다. 어떻게 다른 것일까? 아래에서 살펴보자. 1. == 자바에서 == 연산자는 객체의 주소값을 비교한다. 두 개의 객체가 메모리 상에서 동일한 위치(주소)에 있는지를 비교한다. 즉, 두 개의 객체가 정확히 같은 객체인지를 판단한다. 2. equals() equals() 메소드는 두 객체가 동등한지를 비교한다. 객체의 내용이 같은 경우에 동등하다고 판단한다. 두 객체가 같은 내용을 가졌더라도 메모리 상에서 다른 위치에 존재할 수 있으므로, == 연산자와 다르게 객체의 주소값을 고려하지 않는다. 정리 == 연산자는 객체의 주소값을 비교하는 것이고, equals()는..
About 다형성: 인터페이스를 사용하는 이유 인터페이스란, 객체지향 프로그래밍에서 다형성을 구현하는 방법 중 하나이다. 일종의 추상 클래스이며, 추상 메소드와 상수만을 가지고 있다. 클래스와 달리 다중 상속이 가능하며, 클래스에서 인터페이스를 상속받을 수 있다. 인터페이스는 클래스가 구현해야 하는 메소드의 명세를 정의한다. 즉, 인터페이스는 어떤 클래스가 구현해야 할 메소드의 이름과 파라미터, 반환 타입을 정의한다. 이때, 인터페이스에 정의 된 메소드는 메소드의 구현 내용이 없으며, 구현하는 클래스에서 해당 메소드를 구현해야 한다. 인터페이스가 가지고 있는 메소드를 하나도 구현하지 않는다면, 해당 클래스는 추상 클래스가 된다. 그리고 추상 클래스는 인스턴스를 만들 수 없다. 참조변수의 타입으로 인터페이스를 사용 할 수 있다. 인터페이스는 계층적인 ..
'참조한다'라는 건 앞서 참조 변수란? Animal a = new Animal(); 위 코드를 보면 동물 객체가 만들어지고, 각 객체를 참조하는 a 변수가 선언되었다. -> a 변수는 Animal 클래스의 객체를 가리키는 참조 변수이다. (a 변수에 Animal 객체를 생성해서 넣으라는 뜻) 이 변수는 Animal 클래스의 객체가 저장된 메모리 주소값을 가지고 있다. 이제 a 변수를 이용하여 객체에 접근할 수 있다. 그러나 동물 클래스가 생성되었다고 해서 동물이 만들어진 것은 아니다. new 연산자는 new 연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령이다(객체에 메모리를 올려준다). 메모리에 만들어진 객체(클래스)를 인스턴스라고 하는데, 이렇게 만들어진 객체를 참조하는 변수가 a 변수이다. 메모리에 ..
About 다형성: 클래스 형변환을 하는 이유 Q1. 부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다. 그런데 형변환을 하는 이유가 무엇일까? 부모 타입으로 자식 객체를 참조하면 부모 클래스에 정의된 메소드만 사용할 수 있다. 하지만 때로는 자식 클래스에서 추가로 정의한 메소드나 멤버 변수에 접근해야 할 때가 있다. 이 경우 자식 클래스의 메소드나 멤버 변수에 접근하려면 부모 타입의 참조를 자식 타입으로 형변환해야 한다. 예를 들어, 다음과 같은 코드가 있다고 가정해 보자. class Animal { public void move() { System.out.println("Animal is moving"); } } class Dog extends Animal { public void move() { System.ou..
오버로딩과 오버라이딩 차이 오버로딩(overloading)과 오버라이딩(overriding)은 모두 객체지향 프로그래밍에서 자주 사용되는 개념이다. 오버로딩 같은 이름의 메소드를 매개변수의 개수나 타입 등을 다르게 해서 여러 개 정의하는 것을 말한다. 이렇게 하면 같은 이름의 메소드가 여러 개 있더라도 컴파일러가 매개변수의 타입과 개수를 보고 호출할 메소드를 구분할 수 있다. 예를 들어, 아래와 같은 메소드를 생각해 볼 수 있다. public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } 이렇게 add 메소드를 매개변수의 타입에 따라서 두 개의 버전을 만들었다. 이렇게 하면 int 타입의 두 정수를 더할 때..