티스토리 뷰

이번주는 Java 프로젝트 가 끝난 후 Java심화 교육을 들어갔다.

심화에 들어가기 전 자바의 정석 객체지향 프로그래밍 부분을 한번 더 공부해보았고 주말동안 간단하게 정리해 보았다.


 #  객체지향 언어

객체지향언어의 주요 특징

1. 코드의 재사용성이 높다.

  - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2. 코드의 관리가 용이하다.

  - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

  - 제어자와 메서드를 이용해서 데이터를 보호하고, 코드의 중복을 제거하여 오동작을 방지할 수 있다.

 

-> 객체지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게하면 객체지향적으로 개선할 수 있을지를 고민해보자..

 

#  클래스와 객체

- 클래스의 정의 = 객체를 정의해 놓은 것   //ex)제품 설계도

- 객체 = 사물 또는 개념    //ex) 제품

 

@객체의 구성요소 

- 맴버변수 (속성) = 제품의 크기, 길이,높이 등..

- 메서드 (기능) = 켜기, 끄기, 불륨높이기, 불륨낮추기 

// 인스턴스 =  클래스로부터 만들어진 객체 

 

#선언위치에 따른 변수의 종류

변수의 종류 선언위치 생성시기
클레스 변수 ( Class Variable) 객체 생성이 필요하지 않다 (자동으로
생성)  
클래스 메모리가 올라갈 때
인스턴스변수 (Instance Variable) 객체 생성이 필요하다  인스턴스가 생성되었을 때
지역 변수(Local Variable) 클래스 영역 이외의 영역 변수 선언문이 수행되었을 때
  • static 메서드는 객체 생성없이 호출 가능하다.
  • 객체는 인스턴스 변수 묶음이다.
  • 인스턴스 변수 (IV) 는 객체 생성하여 사용한다.
  • 인스턴스 메서드는 객체를 생성하여 사용하는 인스턴스 변수 를 이용하는 메서드 이다.
  • 그렇기 때문에 static 메서드에서는 인스턴스변수를 사용할 수 없다.  

 

# static을 언제 붙여야 할까?

  1. 클래스를 설계할 때, 맴버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙힌다.
  2. 클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있다.
  3. 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
  4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙히는 것을 고려한다.

 

# 다형성(polymorphism)

 

-정의:조상타입 참조변수로 자손 타입 객체를 다루는 것

 

-조건

  1. 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
  2. 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.

 

# 오버로딩(overloading)

 

-정의: 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것

 

-조건 

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 타입은 관계없다.

 

# 오버라이딩(overriding)

 

-정의: 조상 클래스로부터 받은 메서드의 내용을 변경하는 것

 

-조건

  1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
  2. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다.
  3. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다. 

 

//오버로딩과 오버라이딩의 차이

  • 오버로딩 = 기존에 없는 새로운 메서드를 정의하는 것 (new)
  • 오버라이딩 = 상속받은 메서드의 내용을 변경하는 것 (change)

 

# 생성자(constructor)

 

-정의: 인스턴스 초기화 메서드

-조건

  1. 생성자의 이름은 클래스의 이름과 같아야 한다.
  2. 생성자는 리턴 값이 없다.

//매개변수가 있는 생성자를 사용한다면 코드를 보다 간결하고 직관적으로 만든다.

 

 

# 접근 제어자(access modifier)

  • public (접근제한없음) > protected (같은 패키지+ 자손) > (default) (같은 패키지) > private (같은 클래스)

 

-사용 이유- >> 캡슐화 

  1. 외부로부터 데이터를 보호하기 위해서
  2. 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

 

# 인터페이스(interface)

 

-정의

  • 추상메서드의 집합
  • 구현된 것이 없는 설계도, 껍데기
  • 확장된다는 의미인 'extends' 를 사용하지 않고 구현한다는 의미인 'implements' 를 사용한다.

-장점

  1. 개발시간을 단축시킬 수 있다.
  2. 표준화가 가능하다.
  3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다. (추상클래스는 불가능)
  4. 독립적인 프로그래밍이 가능하다.

 

 


 

 

유튜브 강의를 통해 Java의 정석 강의를 들었고,

강사님께서 객체지향 부분은 반복해서 공부하고 요약을 작성해 보라고 하였다. 

Spring으로 넘어가기 전에 Java의 꽃인 객체지향 부분을 한 번 더 정리해 보았다.

확실히 반복해서 공부하다 보니 처음에는 들어오지 않았던 개념들이 이해되기 시작했고

수업에서 강사님이 해주시는 말을 알아들을 수 있게 되었다. 

다음 주부터는 알고리즘에 시간을 더 투자하고 CS 공부에도 시간 분배를 해봐야겠다.

 


 

 

출처= 남궁 성 지음, Java의 정석, 도우출판(2019), p160-267.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함