개발자상식 <백엔드 개발자> (17)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

개발자상식 <백엔드 개발자> (17)[책리뷰 & Book review]

by Life & study 2024. 1. 24.
반응형

개발자상식 <백엔드 개발자> (17)

[책리뷰 & Book review]

 

 

자바의 생성자란?

 

자바의 생성자(Constructor)는 객체를 생성할 때 호출되는 특수한 메서드입니다. 

생성자의 주요 역할은 객체의 초기화입니다. 즉, 객체가 생성될 때 필드를 원하는 값으로 설정하거나, 필요한 초기 작업을 수행하는 것입니다.

생성자가 없는 경우에도 객체의 생성은 가능합니다. 이때 JVM(Java Virtual Machine)은 기본 생성자(Default Constructor)를 자동으로 제공합니다. 이 기본 생성자는 매개변수가 없고, 별도의 초기화 작업을 수행하지 않습니다.

그러나 대부분의 경우, 우리는 객체를 생성할 때 특정한 상태로 초기화하고 싶을 것입니다. 이럴 때는 필요에 맞게 생성자를 정의하여 사용합니다.

예를 들어, Person 클래스가 있다고 가정해봅시다:

java

public class Person {
    private String name;
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter 메소드
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}


이 클래스에는 name과 age를 매개변수로 받는 생성자가 정의되어 있습니다. 

이 생성자를 통해 Person 객체를 생성하면, 객체는 원하는 상태로 초기화됩니다.

java

public class Test {
    public static void main(String[] args) {
        Person person = new Person("John", 20);
        System.out.println(person.getName());  // "John"
        System.out.println(person.getAge());  // 20
    }
}


따라서 생성자는 객체의 재사용성과는 직접적인 관계가 없으며, 객체의 초기 상태를 설정하는 역할을 수행합니다.

 이를 통해 객체가 생성될 때 필요한 조건을 충족시키거나, 특정한 상태로 초기화할 수 있습니다.

 

 

자바 싱글턴 패턴

자바와 Spring에서 가장 많이 활용되는 디자인 패턴 중 하나는 '싱글턴 패턴(Singleton Pattern)'입니다. 싱글턴 패턴은 특정 클래스의 인스턴스가 하나만 생성되어 전역적으로 사용되도록 하는 패턴으로, 데이터베이스 연결, 로깅, 설정 관리 등에서 주로 사용됩니다.

java

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}


위의 코드에서 Singleton 클래스는 private 생성자를 갖고 있어 외부에서 직접 인스턴스를 생성할 수 없습니다. 대신 getInstance() 메서드를 통해 인스턴스에 접근할 수 있으며, 이 메서드는 최초 한 번만 인스턴스를 생성하고 이후에는 항상 같은 인스턴스를 반환합니다.

 

 

 

 

팩토리 메소드 패턴(Factory Method Pattern)'

팩토리 메소드 패턴(Factory Method Pattern)'도 자주 사용됩니다. 

팩토리 메소드 패턴은 객체 생성 코드와 비즈니스 로직을 분리하는데 유용합니다. 

Spring 프레임워크의 BeanFactory 인터페이스는 이 패턴을 사용합니다.

java

public interface Animal {
    void speak();
}

public class Dog implements Animal {
    public void speak() {
        System.out.println("Bark");
    }
}

public class Cat implements Animal {
    public void speak() {
        System.out.println("Meow");
    }
}

public class AnimalFactory {
    public Animal getAnimal(String type) {
        if ("Dog".equals(type)) {
            return new Dog();
        } else if ("Cat".equals(type)) {
            return new Cat();
        }
        return null;
    }
}


위의 코드에서 AnimalFactory는 Dog나 Cat 객체를 생성하는 역할을 합니다. 이를 통해 객체 생성 코드를 분리하고, 확장성을 높일 수 있습니다.

이 외에도 '전략 패턴(Strategy Pattern)', '템플릿 메서드 패턴(Template Method Pattern)', '데코레이터 패턴(Decorator Pattern)' 등이 자주 사용되며, Spring 프레임워크 내부에서도 활용되고 있습니다. 이들 패턴은 객체 간의 관계를 유연하게 만들거나, 코드의 재사용성을 높이는 등 다양한 목적으로 사용됩니다.

 

 

 

 

 

 

자바 인터페이스란?

 

인터페이스는 메소드의 시그니처를 정의하는 역할을 합니다. 인터페이스를 구현하는 클래스는 인터페이스에 정의된 메서드를 모두 구현해야 합니다. 인터페이스를 구현한 객체는 인터페이스 타입의 참조 변수를 사용하여 호출될 수 있습니다.

예를 들어, Animal이라는 인터페이스가 있다고 가정해봅시다:

java

public interface Animal {
    void speak();
}
Dog와 Cat 클래스가 Animal 인터페이스를 구현한다고 가정해봅시다:

java
public class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("Bark");
    }
}

public class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("Meow");
    }
}


이제 Animal 인터페이스 타입의 참조 변수를 사용하여 Dog와 Cat 객체를 다룰 수 있습니다:

java

public class Test {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.speak();  // "Bark"
        cat.speak();  // "Meow"
    }
}


위의 코드에서 dog와 cat 변수는 Animal 인터페이스 타입입니다. 

그러나 new Dog()와 new Cat()을 통해 각각 Dog와 Cat 객체를 생성하였습니다. 이렇게 인터페이스 타입의 참조 변수를 통해 구현 클래스의 객체를 다루는 것을 '다형성(Polymorphism)'이라 합니다.

이렇게 인터페이스를 사용하면, 구현 클래스가 바뀌더라도 인터페이스 타입의 참조 변수를 통해 객체를 다룰 수 있으므로, 코드의 유연성을 높일 수 있습니다. 이는 디자인 패턴 구현 등에서 유용하게 활용됩니다.

 

 

 

 

 

 

 

spring에서 사용되는 인터페이스는 무엇?

 

물론이죠, Spring MVC 패턴2에서 인터페이스를 사용하는 방법에 대해 설명해 드리겠습니다. 기본적으로 Spring MVC는 인터페이스를 통해 유연하게 설계를 할 수 있게 해 줍니다.

먼저, Controller 인터페이스를 사용하는 예제 코드를 살펴봅시다.

java

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("hello");
        mav.addObject("message", "Hello Spring MVC");

        return mav;
    }
}


위의 코드에서 HelloController는 Spring MVC의 Controller 인터페이스를 구현합니다. Controller 인터페이스의 handleRequest 메소드를 오버라이드하여 요청을 처리하고, ModelAndView 객체를 반환합니다. 반환된 ModelAndView 객체는 View 이름과 Model 정보를 담고 있습니다.

다음으로, 이를 XML 설정 파일에 매핑하는 방법을 살펴봅시다.

xml

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello.do">helloController</prop>
        </props>
    </property>
</bean>

<bean id="helloController" class="com.example.HelloController" />


XML 설정 파일에서는 SimpleUrlHandlerMapping을 이용해서 "/hello.do" 요청이 들어왔을 때 HelloController가 처리하도록 매핑합니다.

마지막으로, View를 설정하는 방법을 살펴봅시다.

xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>


View 설정에서는 InternalResourceViewResolver를 이용하여 View의 경로를 설정합니다. prefix와 suffix를 설정하여 실제 뷰 파일 경로를 "/WEB-INF/views/hello.jsp"로 해석하게 됩니다.

이렇게 Spring MVC 패턴2에서는 Controller 인터페이스를 이용하여 요청 처리 로직을 구현하고, XML 설정 파일을 통해 요청 매핑과 View 설정을 수행합니다. 이를 통해 유연하게 웹 애플리케이션을 설계하고 구현할 수 있습니다.

 

 

 

 

 

 

자바 인터페이스와 클래스의 차이점은?

 

Java Spring에서 인터페이스와 클래스의 차이점에 대해 설명해 드리겠습니다. 인터페이스와 클래스는 자바에서 제공하는 두 가지 타입의 참조 데이터 유형입니다.

인터페이스(Interface) 인터페이스는 메소드와 상수만을 가질 수 있는 특별한 종류의 클래스입니다. 인터페이스는 구현체가 없으며, 오직 선언만을 가집니다. 인터페이스는 다른 클래스에서 구현되어야 합니다.
java

public interface MyInterface {
    void method1();
    void method2();
}


위의 코드에서 MyInterface는 두 개의 메소드메서드 method1과 method2를 선언하고 있습니다. 이 메서드들은 실제 구현이 없으며, 다른 클래스에서 이를 구현해야 합니다.

클래스(Class) 클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 템플릿 또는 설계도입니다. 클래스는 상태(필드)와 행동(메서드)을 가질 수 있습니다.
java

public class MyClass implements MyInterface {
    @Override
    public void method1() {
        System.out.println("Method 1 implementation");
    }

    @Override
    public void method2() {
        System.out.println("Method 2 implementation");
    }
}


위의 코드에서 MyClass는 MyInterface를 구현하고 있습니다. MyClass는 method1과 method2의 구현을 제공하고 있습니다.

Java Spring에서는 인터페이스를 통해 다양한 구현체를 가질 수 있도록 유연성을 제공하며, 이를 통해 의존성 주입(Dependency Injection)이 가능해집니다. 클래스는 이 인터페이스를 구현하여 실제 로직을 제공합니다. 이렇게 인터페이스와 클래스를 적절히 활용함으로써 코드의 재사용성과 유지보수성을 향상할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

#개발자취업 #개발자기초 #개발자 #개발자분야 #개발자분류 #개발자종류 #it개발자 #서버개발자 #개발자성장 #신입개발자 #ios개발자 #개발자노트북 #개발자되는법 #개발 #앱개발 #웹개발 #개발분야 #it개발 #개발공부 #코딩상식 #개발공부 #개발초보

 

#개발자취업 #개발자면접 #개발자채용 #백엔드개발자 #백엔드개발자 #백엔드개발자취업 #백엔드개발 #프론트엔드개발자 #개발자상담 #백엔드 #개발자 #앱개발자 #웹개발자 #개발자팁 #앱개발자 #백엔드취업 #백엔드공부 #백엔드강의 #백엔드독학

 

#전산직면접 #면접 #면접팁 #면접관 #공공기관전산직면접 #공사면접 #면접질문 #면접할말 #면접준비 #면접준비 #면접답변 #면접질문 #면접기출 #전화면접 #면접복장 #면접답변 #면접꿀팁 #모의면접 #면접후기 #롯데면접 #면접후기 #임원면접 #최종면접 #면접꿀팁

 

 

 

 

 

반응형

댓글