여니의 성장 diary
article thumbnail
728x90
반응형

자바의 핵심 객체지향 start - !!!!!!!!!!!!!!!!!!!!!!!!

 

우선 객체지향의 개념에 대해 먼저 익히는 것이 중요할 것 같다 :)

자바는 객체 지향 프로로그래밍(OOP, Object Oriented Programming)을 기반으로 하는데.

객체가 프로그램의 부품이 되어 상호간에 데이터를 주고받는 시스템이다.

 

객체 지향 프로그래밍에서 객체(Object)란 Class로부터 생성되어

new 연산자로 생성자 메소드를 호출하여 생성하는데 이때 생성된 객체는 서로 독립적이다.

또한 이렇게 클래스로부터 생성된 객체를 그 클래스의 인스턴스라고 부른다.

 

객체 지향 프로그래밍의 특징은 캡슐화, 상속, 다형성, 추상화 4가지인데,

이번 수업시간에는 그 내용에 대해 자세하게 다루지는 않았지만

이전에 공부를 했을때 배웠던 내용을 기억하면서 교재에 따른 개념을 다시 한 번 확인해보았다!

 

캡슐화(Encapsulation) :  객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것

상속(Inheritance) : 부모 역할의 상위객체가 자지고 있는 필드와 메소드를

자식 역할의 하위 객체에게 물려주어 사용할 수 있도록 해주는 것

다형성(Polymorphism) :  같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

추상화(Abstract) : 클래스들의 공통적인 특성을 추출해서 활용 가능

 

 

객체 생성 및 참조값 비교

 

실제로 객체를 생성하면서 클래스의 구성을 공부해보았다!

클래스에는 객체가 가져야 할 구성 멤버가 선언되는데 필드(Field), 생성자(Constructor), 메소드(Method)가 있다.

 

필드란 객체의 데이터가 저장되는 곳을 말하는데, 위의 코드에서 Line4에 해당된다.

생성자란 객체 생성 시 초기화 역할을 담당하는 중괄호{} 블록을 말하고,

메소드란 객체의 동작에 해당하는 실행 블록을 말한다.

 

먼저 필드를 가진 클래스를 생성하여 실제 메인 메소드에서 호출하여 확인하는 코드를 작성해보았다.

메인 메소드에서 생성자 new 연산자로 새로운 객체를 생성하여 이를 참조하는 변수에 할당해준다.

그러면 기존에 생성해두었던 객체의 필드를 또 다른 클래스의 메인메소드에서 활용이 가능하다는 것을 알 수 있다.

 

클래스 생성과 호출

 

클래스를 생성한 다음 새로운 객체를 생성하여 객체의 필드 뿐만 아니라 메소드도 호출할 수 있다.

위의 코드는 예제를 통해 객체와 클래스를 생성하고 호출하는 코드를 따로 한 번 작성해 본 것이다.

 

먼저 Phone이라는 클래스를 생성하여 company, model, price라는 필드를 선언해주고,

반환타입이 없는 setInfo() 메소드를 생성하여 필드 값을 할당해주도록 하고,

반환 타입이 없는 printInfo() 메소드를 생성하여 필드 값을 출력해주도록 한다.

 

그리고 PhoneDemo라는 클래스를 따로 생성하여 생성자 new 연산자를 통해 

변수 ph1, ph2, ph3에 각각 새로운 객체를 할당해준다.

 

필드 값을 할당하는 방법에는 2가지가 있는데, 클래스에서 직접 필드에 값을 할당하는 방법과

객체 클래스에서 생성했던 setInfo() 메소드를 호출하여 값을 할당해주는 방법이 있다.

전자의 방법으로 Line 9, 19를 작성하고, 후자의 방법으로 Line 13 - Line 15를 작성하였다.

 

마지막으로 각 변수에 printInfo() 메소드를 호출해주면 필드값을 출력해준다.

 

생성자 메소드

 

다음으로 생성자 메소드에 대해서도 숙지할 필요가 있는데, 이 부분은 사실 아직 좀 어렵지만 우선 기록해본다!

생성자 메소드는 new 연산자에 의해 호출되어 객체의 초기화를 담당하고, 객체를 사용할 수 있도록 준비하는 역할을 수행하는 메소드인데 반환타입을 따로 명시하지 않고, 반드시 클래스 이름과 동일하게 명명하는 메소드이다.

 

생성자 메소드는 매개변수가 없을수도 있고 매개변수가 여개 개일수도 있는데.

매개변수가 없는 생성자를 기본생성자라고 하고, Line 14에 해당한다.

그리고 Line 19 처럼 매개변수가 있는 생성자 메소드로도 활용할 수 있다.

 

 

기본생성자와 매개 변수가 있는 생성자를 구분하여 숙지해야하는 중요한 이유는

매개 변수가 있는 생성자를 정의했을 경우 기본생성자는 생략이 불가능하기 때문이다.

 

생성자 선언을 생략한 경우 컴파일러가 기본생성자를 추가하는데,

컴파일러가 추가하는 기본생성자의 접근제한자는 클래스의 접근제한자를 따른다.

위의 코드에서 살펴보았을 때 클래스의 접근제한자가 public이기 때문에

컴파일러가 추가하는 기본생성자 Car() 메소드 또한 접근제한자를 public으로 따르는 것이다.

 

또한 위의 코드에서 Line 8은 기본생성자, Line 15 는 매개 변수가 있는 생성자 메소드인데,

이 두가지 생성자를 생략하고, 필드만 선언한 경우 컴파일러가 기본생성자를 추가하기 때문에

메인메소드에서 기본생성자를 호출할 수 있는 것이다.

 

그러나 생성자를 하나라도 추가한 경우 컴파일러는 기본생성자를 추가하지 않기 때문에

매개 변수가 있는 생성자를 정의하였을 경우에는 기본생성자를 반드시 직접 추가해주어야만

메인메소드에서 기본생성자를 호출할 수 있으니 주의해야한다.

 

생성자 필드 초기화

 

마지막으로 필드 초기화의 개념에 대해 알아보았다.

초기값이 없이 선언된 필드는 객체가 생성될 때 기본값으로 자동 설정되는데,

위의 코드에서 사용한 String 타입의 필드는 null, int 타입 필드는 0을 기본값으로 설정한다.

 

기본값을 대신하여 다른 값으로 필드 초기화를 하는 방법은 총 3가지가 있는데,

Korean 클래스의 Line 7, nation 처럼 필드를 선언할 때 초기값을 설정하는 방법이 첫 번째이다.

그리고 KoreanExam 클래스에서 Line 5, 6에서 처럼 생성자의 매개 값으로 초기값을 설정할수도 있고,

Korean 클래스의 Line 12, 13과 같이 매개 변수와 필드명이 같은 경우에는 this를 활용할수도 있다.

 

마지막으로 설명한 this의 경우에는 관례적으로 필드 초기화를 할 때에는

매개변수의 이름을 필드와 동일한 이름으로 사용하기 때문에 매개변수와 필드 변수를 구분해주는 역할인데,

"this.필드 변수 = 필드 변수;" 형태로 필드에 매개변수(로컬변수)를 대입해주는 방법으로 활용된다.

 

그리고 KoreanExam 클래스에서 Line 5, 6에서 전달받은 매개변수 값을 필드 변수 k1, k2에 저장하는 것처럼

외부에서 전달받은 매개변수 값을 필드 변수에 저장한다고 생각하면 된다.

 

뒤에서 더 자세하게 배우겠지만 static으로 정의된 필드는 정적 필드라고 하는데, 

메인메소드에서 객체를 생성하여 호출하지 않고, "클래스명.필드명" 형식으로 호출한다.

 


객체 지향은 자바에서 가장 중요한 부분이기 때문에

정신 더 빠짝 차리고 수업에도 더 집중하고, 복습을 무한반복해야할 것 같다!

 

그리고 오늘은 학교에서 첫 상담 시간을 가졌는데,

선생님께서 추천해주신 알고리즘 문제도 틈틈히 풀어보도록 해야겠다 :)

 

기록하면서 복습하는 지금의 열정이 꾸준하게 지속되도록 더 부지런히 노력해야지!

728x90
반응형
profile

여니의 성장 diary

@pponyo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!