Java/Java Study 22

[객체지향] 추상 클래스 (5월18일 추가내용)

● 제어자로 abstract 가 붙고, 메서드의 내용이 없는 메서드를 갖고 있는 클래스를 추상 클래스라고 정의한다. 처음 추상 클래스란 개념을 맞닥뜨리게 되면 추상 클래스의 정의 자체는 그렇게 어렵지 않지만, 그래서 이 추상 클래스가 뜻하는 바가 무엇이고, 왜 쓰는지가 아마 많이 궁금할 것이다. 이에 대해서 제대로 이해만 한다고 해도 객체지향에 대한 개념은 잘 정립되었다고 봐도 무방하다고 본인은 생각한다. 따라서 이번 포스팅에서 다루어볼 예정이다. 먼저 정의를 조목조목 따져보자. 1) 제어자 abstract 우리가 대표적으로 알고 있는 접근제어자는 private protected default public 등이 존재한다. 그 외에 각기 다른 임무를 수행하는 제어자들 중 abstract가 붙으면 추상 클래..

Java/Java Study 2021.05.16

[객체지향] 다형성, Polymorphism - Part3 (다형성의 장점)

● 다형성 part 1, 2에서 배운 다형성을 간략하게 정리해보자, part - 1) 조상타입의 참조변수로 자손타입의 객체를 생성할 수 있다.(자손의 인스턴스를 참조할 수 있다. 단, 조상타입의 참조변수로 자손타입의 멤버변수를 호출할 수는 없다.) part - 2) 상속관계의 두 클래스는 서로 참조변수의 형 변환이 가능하다. (다만 주의해야 할 점은 조상타입을 자손타입 다운 캐스팅할 때 조상타입의 참조변수가 자신의 인스턴스를 가리키고 있다면 이는 part - 1에 위배됨으로 형 변환하려는 참조변수가 어떤 인스턴스를 참조하고 있는지를 파악해야 한다.) 자 그러면 이런 다형성의 개념이 어떤 장점 때문에 쓰이는지를 알아보자. 1) 매개변수에 다형성을 줄 수 있다. 매개변수에 다형성을 준다는 게 무슨 의미일까?..

Java/Java Study 2021.05.13

this & this( ) & super (5월/13일 내용추가)

● 자바를 배우면서 한 번쯤은 누구나 헷갈릴만한 파트이다. 본 게시물에서 2 부분으로 나눠서 설명을 해보려 한다. 1) this & this( ) this를 무엇이라고 배웠는지 기억하는가? this는 바로 인스턴스 변수와 지역변수를 구분하기 위해서 쓰는 참조 변수이다. 여기서 인스턴스 변수는 클래스 내에 선언된 변수이고(Static이 붙지 않은), 지역변수는 메서드 내에 정의된 변수이다. 이 둘을 구별한다는 것인데 이게 무슨 의미인지 IPhoneTest라는 클래스를 만들어서 확인해보자 class iPhone { String model; String color; int capacity; iPhone(){ model ="iPhoneX"; color = "White"; capacity = 64; } iPhon..

Java/Java Study 2021.05.10

오버라이딩 vs 오버로딩

● 사실 코딩을 하는 과정에선 오버라이딩(Overriding)과 오버로딩(Overloading)을 헷갈릴 일은 없다. 왜냐하면 그 차이가 너무나도 명백하기 때문에 오버라이딩을 써야 하는 상황에서 오버로드를 쓰는 사람은 없을 것이기 때문이다. 하지만 굳이 이렇게 정리하는 이유는 면접에서 혹은 누군가가 물어본다면 그 차이를 명확히 설명하기 위해서이다, 또한 코딩을 처음 접하는 사람들은 각각의 개념도 잘 잡히지 않은 상태에서 이 둘을 헷갈려하면 굉장히 힘들기 때문이다(경험담). 언제나 그렇듯 간단하게 처음에 정리해보자면 오버로딩은 새로운 메서드를 형성하는 것이고 , 오버라이딩은 상속받은 메서드의 내용을 수정하는 것, 먼저 오버로딩부터 살펴보면 , 오버로딩은 한 클래스 내에서 이름이 같은 새로운 메서드를 형성하..

Java/Java Study 2021.05.08

[객체지향] 다형성, Polymorphism - Part2 (참조변수의 형변환)

● 서로 상속 관계인 부모 자식관계의 클래스 사이에서는 서로 형 변환이 가능하다 조상 타입을 자손 타입으로 형 변환을 (DOWN-CASTING) 그 반대를 (UP-CASTING)이라고 한다. class Car { String color; int door; void drive() { System.out.println("drive,Brrrr~"); } void stop() { System.out.println("멈춰!"); } } class FireEngine extends Car { void water() { System.out.println("water!!"); } } Car클래스를 상속받은 FireEngine클래스이다. ※다시한번 다형성 PART-1의 개념을 반복해보자면, Car타입(조상 타입) 참조 ..

Java/Java Study 2021.05.03

[객체지향] 다형성, Polymorphism - Part1

● 서로 상속관계에 있는 클래스 사이에서, 조상 클래스 타입의 참조 변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하는 것을 다형성이라고 부른다. 위 문장만으론 다형성에 대한 감이 오질 않으니 코드를 보면서 객체를 생성해보자 class Tv { boolean power; int channel; void power() {} void channelUp() {} void channelDown() {} } class CaptionTv extends Tv { String text; void caption() {} } 위의 코드를 참조하여 Tv와 CaptionTv의 객체를 생성하면 다음과 같다. Tv tv1 = new Tv(); CaptionTv tv2 = new CaptionTv(); 일반적인 객체 생성은 위..

Java/Java Study 2021.04.26

new 연산자 와 객체생성에 대하여

다형성 공부하던 도중 예제에서 궁금한 점이 발견되었고, 나는 객체의 선언과 생성에 관하여 약간의 오해가 있었다는 걸 알게 되었다. Computer com = new Computer(); 컴퓨터라는 클래스에서 객체를 하나 생성하였다. 이것을 하나하나 분석해보자 1) Computer com; 내가 만든 클래스인 컴퓨터라는 참조 타입의 변수를 선언하였다(참조 변수). com은 참조 변수 이므로 초기값이 자동으로 null로 설정된다.(지역변수는 꼭 초기화를 거쳐야 한다.) 이제 com은 주소 값이 담길 그릇인 것이다. 2) new Computer(); 컴퓨터 클래스의 생성자에 new를 붙여주면 연산자 new에 의해서 Computer클래스의 인스턴스가 메모리 상의 빈 공간에 생성과 함께 이 객체의 주소가 생성된다..

Java/Java Study 2021.04.24

Call by value

● 자바의 정석 예제를 통하여 call by value를 알아보자 ● Call By Value란? 자바, C언어 등은 함수에 매개변수값을 전달할 때 Call By Value라는 방식을 사용한다. (C++은 참조연산자 '&' 가 있어서 call by reference를 지원한다.) 좀 더 쉽게 말하면 '값'을 복사해서 전달하는 방식을 사용하는데 이것이 바로 Call By Value 라고 한다. 먼저 아래 예제를 한번 같이 살펴보고 그 결과를 예측해보자 class Data {int x;} public class PrimitiveParamEx { public static void main(String[] args) { Data d =new Data(); d.x=10; System.out.println("mai..

Java/Java Study 2021.04.19

[객체지향] 클래스, 객체, 인스턴스

● 클래스, 객체, 인스턴스? 대체 이것들은 무엇인가 프로그래밍을 접하면서 너무나도 어려웠던 개념들이다. 개발에 손을 대고 나서 2개월 차에야 감을 잡은 개념들이었던 거 같다 이해하기 힘든 만큼 한번 이해해놓으면 프로그래밍을 하는 데 있어서 시야가 넓어지는 느낌이고 코딩을 하면서 코드 간의 관계를 이해하는데 도움이 많이 된다. 클래스(class)란 무엇인가 하면 '객체'를 정의해놓은 것이라고 말할 수 있다. 흔히 쓰는 비유중 클래스는 설계도이고 객체는 그 설계도로 만든 제품이라고 표현한다. 클래스는 설계도이고 설계도로 만든 제품이 바로 객체이다. 그리고 클래스에서 객체를 생성하는 과정을 우리는 '인스턴스화(instantiate)'라고 부르며, 인스턴스(instance)와 객체는 같은 말이라고 봐도 무방하..

Java/Java Study 2021.04.12

[객체지향] 객체지향 프로그래밍 (6/2일 추가내용 + 다형성)

● 객체지향 프로그래밍 객체지향 프로그래밍이란 프로그램의 규모가 점점 커지고, 그 프로그램을 사용하는 사용자들의 요구가 빠르게 변화해가는 상황을 기존의 절차적 언어(절차적 프로그래밍)로는 극복하기 어렵다는 상황에까지 이르면서 1995년 자바의 발표 이후 객체지향 언어는 프로그래밍 언어의 주류로 자리 잡게 되었다. '객체지향 언어' 란 기존의 프로그래밍 언어에 약간의 룰을 접한 것으로써, 아주 간단하게 이 규칙에 대해 말하자면 코드를 유연하게 만들기 위한 룰이라고 볼 수 있다. 이러한 룰을 적용시킨 이유는 앞서 말한 빠른 시대적 변화에 대응하기 위하여 많은 개발자들이 프로그램에 대한 개발과 유지보수를 용이하게 만들기 위함이다. 이러한 규칙을 접목시킨 객체지향 언어의 특징이란 다음과 같다. 1. 코드의 재사..

Java/Java Study 2021.04.12