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

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

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

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

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

[책리뷰 & Book review]

 

 

캡슐화와  스프링과 데이터베이스의 연관도

 

. 캡슐화

캡슐화는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 

이는 데이터와 그 데이터를 조작하는 메서드를 하나의 '클래스'라는 캡슐에 담아두는 것을 의미합니다. 

이렇게 하면 데이터를 직접 조작하기 어렵게 만들어 데이터의 안전성을 높이고, 코드의 재사용성과 유지 보수성을 향상할 수 있습니다.

java

public class UserEntity {
    private Long id;
    private String name;
    private String email;

    // getters and setters
    // 이 메서드들을 통해 간접적으로 데이터에 접근
}


위의 UserEntity 클래스는 id, name, email이라는 데이터를 캡슐화하고 있습니다. 

이 데이터에 접근하려면 getter와 setter 메서드를 통해야 합니다. 이렇게 데이터를 캡슐화하면 데이터를 안전하게 보호할 수 있습니다.

2. 스프링과 데이터베이스의 연관도

스프링 프레임워크는 데이터베이스와의 연동을 위해 JdbcTemplate, JPA, MyBatis 등 다양한 데이터 액세스 기술을 지원합니다. 이를 이용하면 데이터베이스 연산을 추상화하여 사용할 수 있어, 데이터베이스에 직접적인 SQL 문을 작성하지 않고도 데이터베이스 연산을 수행할 수 있습니다.

java

@Autowired
private JdbcTemplate jdbcTemplate;

public UserEntity getUserById(Long id) {
    String sql = "SELECT * FROM users WHERE id = ?";
    return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
}


위의 코드는 JdbcTemplate를 이용해 id에 해당하는 사용자 정보를 조회하는 예시입니다. SQL 문을 직접 작성하지 않고 JdbcTemplate의 메서드를 이용해 데이터베이스 연산을 수행합니다.

3. ORM과 데이터베이스의 연관도

ORM(Object-Relational Mapping)은 객체 지향 프로그래밍과 관계형 데이터베이스의 '다리' 역할을 합니다. 

ORM 도구를 사용하면 SQL 문을 직접 작성하지 않고도 데이터베이스 연산을 수행할 수 있습니다. JPA(Java Persistence API)는 Java에서 사용되는 ORM 기술 중 하나입니다.

java

@Entity
public class UserEntity {
    @Id
    @GeneratedValue
    private Long id;

    // ...
}


위의 UserEntity 클래스는 @Entity 어노테이션이 붙어 있어 JPA가 관리하는 엔티티 클래스임을 나타냅니다. 이 클래스는 데이터베이스 테이블과 매핑되어, JPA를 사용하면 SQL 문을 작성하지 않고도 데이터베이스 연산을 수행할 수 있습니다.

 

 

 

캡슐화와 정적 데이터 연관성은?

자바에서 캡슐화(encapsulation)와 정적 데이터(static data)는 서로 다른 개념입니다. 

하지만 둘은 객체 지향 프로그래밍에서 중요한 역할을 하며, 서로 상호작용할 수 있습니다.

캡슐화(Encapsulation):
캡슐화는 객체의 속성(데이터 필드)과 이 속성에 영향을 미치는 메서드를 함께 묶는 (즉, '캡슐화') 프로세스를 말합니다. 이는 데이터를 보호하고, 외부에서 직접적인 접근을 제한하며, 메서드를 통해서만 접근할 수 있게 하는 것입니다.
java

public class EncapsulationExample {
  private int age;

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}


위 예제에서 age 변수는 private로 선언되어 있어 외부에서 직접 접근할 수 없습니다. 하지만 public 메서드인 getAge()와 setAge(int age)를 통해 간접적으로 접근이 가능합니다. 이처럼 메서드를 통해 데이터에 접근하게 만드는 것이 캡슐화입니다.

정적 데이터(Static Data):
정적 데이터는 'static' 키워드를 사용하여 클래스 레벨에서 선언된 데이터를 의미합니다. 이는 특정 인스턴스에 속하지 않고, 클래스에 속하며 모든 인스턴스가 공유합니다.
java

public class StaticExample {
  public static int count = 0;

  public StaticExample() {
    count++;
  }

  public static int getCount() {
    return count;
  }
}


위 예제에서 count 변수는 static으로 선언되어 있어, StaticExample 클래스의 모든 인스턴스가 이를 공유합니다. 즉, StaticExample 객체를 생성할 때마다 count 값이 증가하며, 이는 모든 객체가 동일하게 볼 수 있습니다.

따라서, 캡슐화와 정적 데이터는 같은 것이 아닙니다. 하지만 둘은 각각의 상황에 따라 사용되며, 

때로는 함께 사용되어 코드의 효율성과 안정성을 높일 수 있습니다.

 

 

 

 

 

 

메소드

 public int getAge()와 public void setAge(int age)는 메서드(method)입니다.

메서드는 클래스 내에서 특정 작업을 수행하는 코드 블록입니다. 이 경우, getAge()와 setAge(int age) 메소드는 age 필드에 접근하는 방법을 제공합니다. getAge()는 age 필드의 값을 반환하고, setAge(int age)는 age 필드의 값을 설정합니다.

다음은 이를 시각적으로 설명한 그림과 코드입니다:

java

public class EncapsulationExample {
  private int age;  // 이 부분은 필드(field)입니다.

  // 아래 두 메소드는 getAge() 와 setAge(int age) 로 age 필드에 접근할 수 있게 해주는 메소드입니다.
  public int getAge() {  // 이 부분은 'getter' 메소드입니다.
    return age;
  }

  public void setAge(int age) {  // 이 부분은 'setter' 메소드입니다.
    this.age = age;
  }
}


시각적 표현:

 ┌──────────────────┐
 │ EncapsulationExample │
 ├──────────────────┤
 │ -age: int        │  <--- private 필드
 ├──────────────────┤
 │ +getAge(): int   │  <--- public 메소드 (getter)
 │ +setAge(age: int)│  <--- public 메소드 (setter)
 └──────────────────┘
이 클래스를 사용하는 방법은 다음과 같습니다:

java

public class Main {
  public static void main(String[] args) {
    EncapsulationExample example = new EncapsulationExample();  // 객체 생성
    example.setAge(25);  // setter를 이용해 age 값을 설정
    System.out.println(example.getAge());  // getter를 이용해 age 값을 가져와 출력
  }
}


이 코드를 실행하면 콘솔에 '25'가 출력됩니다. 이처럼, private 필드인 age에 대한 접근은 클래스 외부에서 직접적으로 이루어질 수 없고, public 메서드인 getAge()와 setAge(int age)를 통해서만 가능합니다. 이것이 캡슐화의 원칙입니다.

 

 

 

 

 

메서드의 정의

 

메서드는 클래스 내에서 특정 작업을 수행하는 코드 블록을 의미합니다. 

메서드를 선언하는 방법은 다음과 같습니다:

java

접근제어자 반환타입 메소드이름(매개변수목록) {
    // 메소드 본문
}


접근제어자(Access Modifier): 메서드에 접근할 수 있는 범위를 정의합니다. public, private, protected 등이 있습니다.
반환타입(Return Type): 메서드가 실행 후 반환하는 데이터의 타입을 정의합니다.
메서드이름(Method Name): 메서드를 호출할 때 사용하는 이름입니다.
매개변수목록(Parameter List): 메서드가 받는 인자를 정의합니다. 필요 없는 경우 비워둘 수 있습니다.
메소드 본문(Method Body): 메소드가 수행할 작업을 코드로 작성하는 부분입니다. 중괄호 {} 안에 위치합니다.
예를 들어, 다음의 코드에서 getAge()와 setAge(int age)는 메서드입니다:

java

public class EncapsulationExample {
  private int age; // 이것은 필드입니다.

  public int getAge() { // 이것은 메소드입니다.
    return age;
  }

  public void setAge(int age) { // 이것은 메소드입니다.
    this.age = age;
  }
}


getAge() 메서드는 public 접근제어자를 가지고 있어 어디서든 호출이 가능하며, int 타입의 값을 반환합니다. 매개변수는 없습니다.
setAge(int age) 메소드는 public 접근제어자를 가지고 있어 어디서든 호출이 가능하며, void를 반환타입으로 가지므로 값을 반환하지 않습니다. int 타입의 매개변수 age를 가집니다.
따라서, 

메소드는 중괄호 {} 내에 코드를 작성하는 것만으로 결정되는 것이 아니라, 접근제어자, 반환타입, 메소드 이름, 매개변수 등과 함께 선언되어야 합니다.

 줄 바꿈, 공백 등의 형식은 메서드를 결정하는 기준이 아닙니다. 메소드는 그 구조와 선언에 따라 결정됩니다.

 

 

 

 

 

 

메소드 매개변수목록은 무엇인가?

 

매개변수(Parameter)는 메서드가 작업을 수행하는 데 필요한 추가 정보를 제공하는 데 사용됩니다. 메소드가 호출될 때 전달되는 값을 받아 저장하는 역할을 합니다. 매개변수는 메소드 선언부에서 괄호() 안에 선언되며, 여러 개의 매개변수가 있을 경우 쉼표(,)로 구분합니다.

예를 들어, 다음과 같은 메소드가 있다고 가정해 봅시다:

java

public int addNumbers(int num1, int num2) {
    return num1 + num2;
}


이 메서드는 두 개의 매개변수 num1과 num2를 가지며, 이 두 매개변수는 메서드가 호출될 때 전달되는 값을 받아 저장합니다. 그리고 이 두 매개변수의 값을 더한 결과를 반환합니다.

메서드를 호출할 때는 다음과 같이 작성합니다:

java

int result = addNumbers(5, 3);


이 경우, addNumbers 메서드는 5와 3이라는 두 개의 값을 받습니다. 

5는 num1에, 3은 num2에 각각 저장되며, 이 두 값을 더한 결과인 8이 result 변수에 저장됩니다.

매개변수의 순서는 중요합니다. 메서드를 호출할 때 전달하는 값들은 매개변수 선언 순서에 따라 순차적으로 전달됩니다. 즉, 첫 번째로 전달된 값은 첫 번째 매개변수에, 두 번째로 전달된 값은 두 번째 매개변수에 저장됩니다.

매개변수는 메서드의 유연성과 재사용성을 높이는 데 중요한 역할을 합니다. 매개변수를 통해 다양한 값을 받아 메소드의 기능을 수행할 수 있습니다.

 

 

 

 

 

 

매개변수의 여러 가지 예제


두 개의 정수 더하기
java

public int addNumbers(int num1, int num2) {
    return num1 + num2;
}



// 메서드 호출

int sum = addNumbers(5, 3);  // sum에는 8이 저장됩니다.


이 메서드는 두 개의 정수를 매개변수로 받아 더한 결과를 반환합니다.

문자열 결합
java

public String concatenateStrings(String str1, String str2) {
    return str1 + str2;
}



// 메소드 호출
String result = concatenateStrings("Hello, ", "World!");  // result에는 "Hello, World!"가 저장됩니다.


이 메소드는 두 개의 문자열을 매개변수로 받아 결합한 결과를 반환합니다.

여러 개의 정수의 평균 구하기
java

public double calculateAverage(int num1, int num2, int num3) {
    return (num1 + num2 + num3) / 3.0;
}



// 메소드 호출
double average = calculateAverage(5, 10, 15);  // average에는 10.0이 저장됩니다.


이 메소드는 세 개의 정수를 매개변수로 받아 평균을 계산하여 반환합니다.

매개변수는 메서드가 수행할 작업에 필요한 값을 제공하는 역할을 합니다. 

메서드를 호출할 때는 괄호 안에 매개변수에 전달할 값을 작성합니다. 

이때, 값들은 매개변수 선언 순서대로 전달됩니다. 

그리고 이 값들은 메서드 내부에서 사용되어 작업을 수행하고 결과를 반환합니다.

 

 

 

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

 

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

 

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

 

 

 

 

 

반응형

댓글