Java (41) 썸네일형 리스트형 Java 핵심 개념 1문 3답 - 익명 클래스(Anonymous class) Q. 익명 클래스가 무엇인가요? A1. 익명 클래스는 이름이 없는 일회용 클래스입니다. 정의와 생성을 동시에 해서 필요한 경우에 사용을 해줍니다. A2. 익명 클래스는 일회용 클래스입니다. 하지만 객체지향 프로그래밍에서 익명 클래스가 필요한 경우는 그렇게 많지 않습니다. 하지만 JDK 1.8부터 람다식이 도입이 되면서 자바는 함수형 프로그래밍이 도입되었습니다. 람다식은 기본적으로 익명 함수로 알려져있지만, 자바에서는 모든 것이 객체입니다. 따라서 람다식도 사실 익명 객체로 구성이 되어있습니다. 익명 객체가 의미하는 것은 람다식을 매개변수, 반환값으로 사용할 수 있는 객체라는 사실입니다. 그렇기에 매개변수로 람다식을 받기 위해서는 참조값을 정의해줘야 하는데, 어떤 익명 객체가 생성될지 모릅니다. 하지만 매.. Java 핵심 개념 1문 3답 - 오버라이딩(Overriding)와 오버로딩(Overloading)의 차이 Q. 오버라이딩과 오버 로딩의 차이는 무엇인가요? A1. 오버라이딩은 상속받은 조상의 메서드를 자신에 맞게 변경하는 것입니다. 오버 로딩은 한 클래스안에 같은 이름의 메서드를 매개변수의 타입, 개수를 달리해서 정의하는 것입니다. A2. 오버라이딩은 '상속 관계'의 메서드에게 쓰이는 개념입니다. 클래스는 클래스를 상속받을 수 있고, 상속받은 클래스의 변수와 메서드를 그대로 사용할 수 있습니다. 하지만 메서드의 내용 수정이 필요한 경우 @Override 어노테이션을 메서드명 위에 작성해주고 안에 있는 내용을 변경할 수 있습니다. 오버라이딩은 선언부를 변경하지 못하고 구현부의 내용만 변경해서 덮어쓰는 것입니다. 오버로딩은 말 그대로 메서드의 내용을 과적하는 것입니다. 하나의 용도인 메서드가 매개변수에 따라서 .. Java 핵심 개념 1문 3답 - Garbage Collector Q. JVM에서 Garbage Collector의 역할이 무엇인가요? A1. 자동으로 Java의 메모리 관리를 해주는 기능입니다. A2. C나 C++언어 등의 언어는 OS 단계의 메모리를 프로그래머가 직접 관리해줘야 합니다. 해당 언어들은 메모리를 사용하기 위해 할당 받았던 메모리를 직접 해제해주어야 합니다. 만일, 사용하지 않으면 메모리 누수(Memory Leack)가 발생하게 됩니다. Garbage Collector는 Java의 JVM이 가지고 있는 메모리 관리 기능입니다. 가비지 컬렉터는 사용하지 않는 메모리를 판단하고 관리해주는 역할을 합니다. 만일 메모리 누수가 발생하더라도 자동으로 프로그램을 종료시켜 OS 단계의 메모리 누수를 방지할 수 있습니다. A3. Garbage Collector(이하 .. Java 핵심 개념 1문 3답 - OOP의 캡슐화 Q. OOP의 개념 중에서 캡슐화가 의미하는 바는 무엇인가요? A1. 정보은닉이라고도 하며, 외부로부터 데이터에 대한 불필요한 접근을 막기 위해서 사용을 하는 개념입니다. A2. 자바에서는 클래스에 대한 접근제어자를 통해 외부 클래스에 대한 접근을 제한합니다. 캡슐화를 통해 각 클래스간의 종속관계를 제거할 수 있으며, 각 클래스의 메서드는 매개변수 의존성 주입을 통해 처리하게 됩니다. 이 방법은 각 클래스의 메서드를 독립적으로 테스트할 수 있어 TDD에도 유용합니다. A3. 접근 제어자는 public, protected, (default), private가 있습니다. public은 모든 패키지에서 접근을 할 수 있습니다. protected는 기본적으로는 같은 패키지 내에 있는 클래스만 접근을 할 수 있고.. Java 핵심 개념 1문 3답 - Intro #00 대다수의 자바 교육은 자바로 시작해서 스프링으로 끝납니다. 앞서 열심히 공부한 자바의 핵심 개념들은 스프링을 통한 프로젝트를 하면서 점차 희미해져가고, 면접을 갈 때 쯤 실무중심의 개념들이 머릿속에 자리를 잡습니다. 하지만 면접장에서는 너무나도 기본적인 개념을 묻습니다. "다형성이 뭐에요?" "오버라이딩과 오버로딩의 차이가 뭐죠?" "클래스랑 인스턴스의 차이가 뭐죠?" 우리는 생각외로 쉬운 질문 수준에 놀라고, 말을 더듬거리는 본인에게 또 한 번 놀라게 됩니다. 기초적이라고 생각했던 개념에 대해서 명료한 답을 하지 못하면 스스로 자책감에 빠지기 마련입니다. 저도 Java에 대한 개념을 재미있게 공부를 했고, 심화적으로도 들여다 봤지만, 막상 스프링에 들어오면서 자바의 기초 개념이 부족하다는 점을 깨닫게 .. 나동빈 자바(Java) 객체(Object) #15 객체(object) 클래스는 객체와 다른 개념이다. 프로그램 만들 때 거의 사용되지 않은 개념이긴 하다. Object 클래스는 모든 클래스의 조상 개념이다. package 객체; public class Archer { String name; String power; public Archer(String name, String power) { this.name = name; this.power = power; } public boolean equals(Object obj) { //다형성 부모 클래스의 변수가 자식 클래스의 인스턴스를 참조할 수 있는 개념 Archer temp = (Archer) obj; // 아처를 obj로 바꿀 수 있는 이유는 obj가 아처보다 더 부모 클래스이기 때문이다. if(name.. 나동빈 자바(Java) 다형성(Polymorphism) #14 부모 package 다형성; public class Fruit { String name; int price; int fresh; public void show() { System.out.println("이름 : " + name); System.out.println("가격 : " + price); System.out.println("신선도 : " + fresh); } } 자식 변수 초기화 package 다형성; public class Peach extends Fruit { public Peach() { price = 1500; name = "복숭아"; fresh = 75; } } 출력 package 다형성; public class Main { public static void main(String[] ar.. 나동빈 자바(Java) 인터페이스(Interface) #13 인터페이스는 추상 클래스보다 더 추상적이고 설계에 가까운 구현방법이라고 할 수 있다. 기본적으로 자바는 다중 상속이 안되게 되어있다. 다중 상속이란 한 클래스가 여러개의 클래스의 상속을 받는 것을 의미한다. 기본적으로는 안되는데 인터페이스를 사용하면 된다. 인터페이스는 말 그대로 설계만 해야 한다. 인터페이스는 동시 작업이 되기 때문에 팀 프로젝트에 유리하고 더 체계적이다. 인터페이스 내에서 실제 구현하는 코드를 작성하면 오류가 난다. (추상(public abstract Dog {})) 에서는 실제 구현가능한 함수도 사용 가능) package 인터페이스; public interface Dog { abstract void crying(); public void show() { // error System... 나동빈 자바(Java) 최종(Final) #12 overriding : 재정의 Final은 상수 선언이므로 이후에 변경이 불가능하다. (Stop Value Change) package Final; public class Main { public static void main(String[] args) { final int number = 10; number = 5; // error number는 이미 정해진 상수이기 때문에. System.out.println(number); } } 기존 상속 관계에서는 메소드를 재정의 할 수 있다. (Stop Method Overriding) package Final; public class Parent { public void show() { System.out.println("Hi"); } } 위와 같은 Paren.. 나동빈 자바(Java) 추상(Abstract) #11 자바에서 추상이란 설계적인 부분이라고 한다. 미완성의 클래스라고 할 수 있다. 설계로써 틀을 갖추고 클래스를 작성할 수 있게 한다. 사각형, 원, 삼각형은 공통적으로 넓이를 가지고 있다. 즉, 어떤 도형이든 간에 2차원으로 표현되기 때문에 넓이가 존재한다. 각자 생김새를 출력할 수 있는 디스플레이라는 함수가 있어야 한다. 이런식으로 공통적으로 가지는 특성이 있으면 반드시 구현할 수 있도록 설계적인 측면에서 추상 클래스를 명시하고 이 추상 클래스를 상속받은 클래스들은 해당 함수들을 구현할 수 있도록 되는 것이다. 클래스를 구성하기 전에 클래스의 내용물을 알려주는 것을 추상 클래스라고 한다. 어떠한 클래스가 구현이 될지 암시해주는 역할. 추상 클래스를 정의하는 기본적인 방법 abstract class Pla.. 이전 1 2 3 4 5 다음