서점에서 보고 괜찮은것같아서 샀는데 정말
>> 초보는 아니지만 그렇다고 고급도 아닌 개발자가 좋은 코드를 짜기에 좋은 팁들이 모여있는 책<<
이라는 말이 잘 어울리는 책이다..
나도 코테 공부를 하며 연습을 할 때, 코드가 통과되는것에만 열을 올렸던 적이 있는데
책을 읽고 아..그렇게 하면 메모리/시간이 엄청 낭비되는구나...를 알 수 있게 되었다.
각설하고.. 자바의 큰 특징인 객체지향에 대해서 공부했다.
------------------------------------------------------------------------------
보통 외부에서 객체지향에 대해 배우면 교수님들/선생님들은 모두 '붕어빵'을 예로 드신다.
붕어빵을 만드는 틀 : class
붕어빵 : object (객체)
->> 대충 붕어빵틀로 붕어빵을 여러개 만들 수 있는듯이 객체 생성할 수 있단 이야기..
근데 난 이런 예시보다는 class의 복제판을 만든다. 라고 생각하는게 더 이해가 잘 된다
메서드를 호출할때의 인수에 값을 전달하거나 변수에 값을 대입할때 아래의 두가지 방법이 있다.
1) 기본으로 값 전달
2) 참조로 값 전달
2가 객체지향을 사용하는 예이다.
public class Entity {
public int value;
}
public class CallReference {
public static void main(String[] args) {
Entity entity = new Entity();
entity.value = 1;
calledReference(entity);
System.out.println("callReference에서 entity : " + entity.value);
}
public static void calledReference(Entity entity){
entity.value *= 2;
System.out.println("calledReference에서 entity : " + entity.value);
}
}
결과값)
calledReference에서 entity : 2
callReference에서 entity : 2
이 경우, call과 called 모두 같은 entity.value 값이 나온다. 객체 자체가 아니라 객체에 대한 참조를 나타내는 값을 전달하여,
호출된 메서드(called) 의 변경사항이 호출자(call) 에 반영이 된다.
객체지향의 잘 알려진 4가지 특징은 아래와 같다.
1) 추상화
객체들의 공통적인 기능 / 요소를 추출하는것을 의미한다.
추상화를 표현하는 방법은 abstract class , interface 2가지 방법이 있다.
abstract class | interface |
1. 일반메소드도 같이 사용가능 2. 다중상속 X |
1. abstract method만 사용가능 2. 다중상속 가능 |
추상화를 하게 되면
1. 중복되는 코드를 줄일 수 있다.
2. 코드가 간결해진다. 등의 특징이 있다.
abstract)
abstract class animalsample{
abstract void howl();
int legs = 4;
boolean tail = true;
}
class Cat extends animalsample{
@Override
void howl() {
System.out.println("냥");
}
}
class Dog extends animalsample{
@Override
void howl(){
System.out.println("멍");
}
}
혹은 이렇게 표현할 수 있다.
interface )
public interface animalsamp {
void howl();
}
class Cat implements animalsamp{
@Override
public void howl() {
System.out.println("냥이야");
}
}
class Dog implements animalsamp{
@Override
public void howl() {
System.out.println("멍이야");
}
}
2) 상속
-> 사실 위의 추상화에서 이미 예시를 들었다.
상속은 기존의 클래스를 재활용하여 새로운 클래스를 작성하는것을 의미한다.
개와 고양이는 다리가 4개이며, 꼬리가 있고, 울음소리가 있다는 특징이 공통된다. -> 이러한 공통사항을 한곳에 모아두고,
이를 재활용해서 개와 고양이class 에서 재활용할 수 있다.
3) 다형성
-> 이것도...위의 예시에 나와있다.
개와 고양이는 많은 부분이 공통되지만 다른점도 분명히 존재한다.
대표적으로는 울음소리가 있다. 개는 멍!하고 울지만 고양이는 냥~하고 운다.
하지만 super class인 animalsample에는 howl 메소드가 있는데, 이는 개 클래스와 고양이 클래스에서 다르게 활용된다!
이를 다형성이라고 한다..
4) 캡슐화
캡슐화란 관련 있는 속성과 기능들을 하나의 캡슐로 만드는것을 뜻한다.
캡슐화를 하면
1) 데이터 은닉화
2) 데이터 보호
가 가능하다.
예를들어
class Book {
int price = 1000;
public int booksPrice(){
return price *= 0.9;
}
}
public class Main{
public static void main(String[] args) {
Book book = new Book();
book.booksPrice();
}
}
가 있다. 이때 책의 가격이 10%할인이 아니라 20,30..등 몇퍼 할인이 되든 나는 booksPrice() 안의 숫자만 바꾸면 되기때문에 아주 편해진다. 이처럼 캡슐화는 데이터를 처리하는 방식/값이 겉으로 드러난게 아니라 객체 자체에서 이루어진다!
'lang > java' 카테고리의 다른 글
[java] map 까보기 (1) | 2023.10.20 |
---|---|
[TIL]06 익명클래스, Nested class (0) | 2023.06.10 |
[TIL]02 자바의 문법은 뭘까? (0) | 2023.06.03 |
[baekjoon] Scanner, BufferedReader 중 어느것을 써야할까 (0) | 2023.05.15 |