전체 글 85

[객체지향] 인터페이스(Interface) (5/24 어휘수정)

● 인터페이스는 기존의 추상화 클래스보다 더 추상화가 높은 추상화 클래스의 개념이며, 기존의 미완성 설계도라는 추상 클래스의 개념과 거의 일치한다. 추상 클래스와 더불어 다소 모호한 개념인 인터페이스에 대해서 알아보기 전에 , 우선 인터페이스는 무엇인지 추상 클래스와 비교해서 알아보고, 인터페이스의 작성규칙과 인터페이스의 다형성까지 공부하면, 인터페이스의 장점에 대해 이해하기 쉬울 것이다. 인터페이스의 장점을 알면 이것을 왜 쓰는지, 쓰는 목적까지 공부하는 데 있어서 좀 더 수월할 것이다. 1) 추상 클래스 vs 인터페이스 이전에 포스팅했던 추상 클래스는 abstract가 제어자로 붙는 클래스이다(추상 메서드를 포함하는). 추상 클래스는 추상 메서드 외에도 멤버 변수와 또한 완성된 메서드를 가질 수 있다..

Java/Java Study 2021.05.16

[객체지향] 추상 클래스 (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

[Bac|<joon>] 백준 1712 : 손익분기점 / 사용자입장 , 관건은 처리시간!

이 코드를 보고 처음에 실수한 두가지가 있는데, 이 두가지에 유의하면서 코드를 짜보겠다. 자, 우리가 구해야 할것은 무엇인가? 바로 손익분기점이 넘어가는 시점의 판매량을 구하는것이다. 간단하게 손익분기점 구하는식을 들여다보자 손익분기점 구하는 식 A(고정비용)+B(가변비용) * i = C(판매가) * i --> 이때의 i가 바로 우리가 구하는 값이다. 이때 좌변을 변수 X로 우변을 Y로 설정하여 " if(X

Java/BackJoon 2021.04.27

[Bac|<joon>] 백준 : 2839 : 설탕배달

이 문제를 맞닥뜨리면 가장 먼저 하는 착각이 있다. 본인은 봉지의 최소 개수만을 생각한 탓에 놓친 것이 있는데 이 문제는 수학 문제이기도 하지만 가장 중요한 목적은 가능하다면 5kg와 3kg를 이용해서 배달을 하는 게 목적이다. 예를 들어서 19kg이라면 5kg 두 개 3kg세개를 해서라도 배달을 해야 하는데 우리의 목표인 것 1) 설탕의 무게 N (Scanner로 입력받는다.) 2) for문의 구조 유의해야 할 점은 정확하게 N킬로그램을 만들 수 있다면, 5kg을 최대한 많이 만들어야 한다. 3kg는 최소로 만들어야 한다. 따라서 바깥 for문의 변수를 i로, 안쪽 for문을 j로 설정하여 조건식 "설탕의 무게=(5*j + 3*i)"를 만족하는 제일 처음의 (i, j) 조합을 구하여 서로 더하면 그게 ..

Java/BackJoon 2021.04.27

[객체지향] 다형성, 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