[JAVA] 객체지향 언어(클래스와 객체)

코린이·2021년 6월 27일
1

JAVA 기초

목록 보기
1/1

객체지향 언어

  • 80년 초 소프트웨어의 위기 ⇒ 빠른 변화를 못 쫒아감
  • 해결책으로 객체지향 언어를 도입 ( 절차적 ⇒ 객체지향 )
  • 코드의 재사용성이 높고 유지보수가 용이, 중복 코드 제거
  • 프로그래밍 언어 + 객체지향개념 ( 규칙 ) ⇒ 규칙이라서 외워야 함!
    • OOP의 4가지 핵심 개념
      1. 캡슐화
      2. 상속
      3. 추상화
      4. 다형성
  • 객체지향 개념은 설계에 해당해서 처음에 하기 힘들다

클래스와 객체

1. 클래스와 객체란?

  • 클래스의 정의 : 객체를 정의해 놓은 것
  • 클래스의 용도 : 객체를 생성하는데 사용
  • 객체의 정의 : 실제로 존재하는 것. 사물 또는 개념
  • 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

2. 객체의 구성 요소 - 속성과 기능

  • 거시적 관점 : 하드웨어를 소프트웨어화(프로그램 화 = 코드) 시키는 것에서 시작
    • 따라서 하드웨어를 분석 & 관찰이 필요함
  • 객체 = 속성(변수) + 기능(메서드) ⇒ TV로 예를 들면
    • 속성 : 크기, 길이, 높이, 색상, 볼륨, 채널
    • 기능 : 끄기, 켜기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등등

3. 객체와 인스턴스

  • 객체 : 모든 인스턴스를 대표하는 일반적인 용어
  • 인스턴스 : 특정 클래스로부터 생성된 객체 ( 예 : TV인스턴스 )
  • 객체와 인스턴스는 같은 의미다라고 생각해도 됨
  • 클래스 ⇒ 인스턴스(객체) , 인스턴스화 한다라고 표현

Q. 클래스가 왜 필요한가?
A. 객체를 생성하기 위해

Q. 객체가 왜 필요한가?
A. 객체를 사용하기 위해

Q. 객체를 사용한다는 것은?
A. 객체가 가진 속성(변수)과 기능(메서드)을 사용하려고


하나의 소스파일에 여러 클래스 작성

// hello2.java로 소스 파일 이름을 해야함
public class Hello2 {}
       class Hello3 {}

// Hello2.java or Hello3.java 둘다 가능
class Hello2 {}
class Hello3 {}
  • java 파일 이름과 Public class 이름과 일치해야 한다.
  • 심지어 대소문자도 일치해야 함
  • 가능하면 하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직

객체의 생성과 사용

1. 객체의 생성

클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

//예를 들면
Tv t;             // Tv클래스 타입의 참조변수 t를 선언 (t를 리모콘으로 비유)
t = new Tv();     // Tv인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장

//이를 한번에 표현하면
Tv t = new Tv();

2. 객체의 사용

t.channel = 7;     // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown();   // Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");

순서
1. 클래스 작성
2. 객체의 생성
3. 객체의 사용

3단계로 사용할 것

  • Tv 인스턴스 중 하나인 t를 print해보면 주소가 찍히는 이유
  • 대입 연산자로 공간에 객체 주소를 대입해주는 것

생각 해보기

Java 언어를 접하면서 왜? 객체지향에 특화되어있는 지, 고민과 함께 공부를 하고 있음
일단, 기본적으로 객체지향 개념 (규칙)을 어느 정도 암기가 필요하다는 사실도 알게 됨
Python도 그렇고 JAVA도 class를 print했을 때 주소값이 나오는게 이해가 되지않았는데
강의를 듣고 메모리 측면과 함께 생각하니 당연하다고 생각이 들었음
( 접근을 통해 이해가 되서 많이 놀램 )
추후, 남궁성님 유튜브 강의를 공부하고 체화 시킨 후 지속적인 업로드를 할 예정


Reference

남궁성님 유튜브 강의를 보고 작성하였습니다.
https://www.youtube.com/watch?v=p1ZZnM715ao&list=PLW2UjW795-f5JPTsYHGAawAck9cQRw5TD&index=4&ab_channel=남궁성의정석코딩

profile
백엔드 개발자를 목표로 공부하고 있습니다.

0개의 댓글