OOP(Object(객체) Oriented(지향) Programming(프로그래밍))의 줄임말이며 object는 사전적 의미는 프로그래머 관점에서는 객체는 클래스에서 생성된 변수이다. 지향은 하고자 한다.이며 그럼 클래스에서 생성된 변수를 사용하고자 하는 프로그래밍방법이 OOP의 한글로 풀어서 말한것인가? 그렇다면 클래스에 들어가는 멤버변수와 메서드들의 모음이 클래스이니 객체지향은 클래스를 잘사용해서 코딩을 하자?라고 저는 느꼈습니다.
그렇다면 객체지향의 특성을 알아보자
캡슐화를 사용하는 가장 큰 이유는 정보 은닉화를 하는것이다. 캡슐화는 내부의 정보에 접근하나 변경할 수 없게 직접적인 접근을 막고 객체가 제공하는 필드와 메서드를 통해서만 접근을 하도록 하는것이다. 그렇다면 예제 코드를 보자
결과
결과는 메인의 encapsulationTest1.name은 없이 진행한 결과값이다. 말이 나온김에 밑에 EncapsulationTest클래스의 멤버변수 중 private String name;의 private를 public으로 바꾸면 오류는 사라지지만 캡슐화가 아니게 된다. 저건 public과 private를 확인하면서 캡슐화에 대해서 알아보기 위해 잠시 넣어본것이다. 그럼 일단 결과에 대한 위의 코드를 설명해보겠습니다.
EncapsulationTest클래스에 멤버변수들을 private를 적어서 외부에서 직접적인 접근을 막았고 메서드를 통해서만 바꿀수가 있게 되었다. 그래서 밑에 getter setter메서드를 추가 해준 것이다. 캡슐화는 클래스에서 제공하는 필드와 메서드를 통해서만 접근이 가능하게 하는것이 캡슐화이다. 근데 캡슐화는 필드와 메서를 통해서 접근하는것인데 오버로드를 통해 EncapsulationTest encapsulationTest2 = new EncapsulationTest("정", 20)으로 접근을 하는거나 getter setter로 접근하는게 encapsulationTest1.name 이렇게 접근하는거랑 솔직히 뭐가 다를까? 저는 설명으로는 은닉화라고 하는데 무슨 의미인지는 알겠지만 근데 솔직히 이해는 자세히는 못했다... 더 공부하면서 캡슐화에 대해 더 알아보겠습니다..
상속은 다른 클래스에 내가(상속해줄 클래스) 가진 것을 주기 위해 상속을 해야한다. 그럼 내가가진 것들을 상속 받은 클래스는 상속해준 클래스의 메서드를 자유롭게 사용이 가능해진다. 예제 코드를 보자
결과
밑에 name클래스에 fistName lastName이라는 메서드를 만들었습니다. 그리고 Hello라는 클래스에 extends(상속을 하는 방법)를 사용해서 상속을 할수있다. 그렇다면 hello메서드에 name클래스가 가진 메서드들을 사용할수있어진다. 그리고 Hello클래스에서 name클래스의 내용들을 바꿔서 다시 사용이 가능해져서 안녕하세요 저는 떙떙떙(이부분을 자유로게 사용이 가능해진다.)입니다. 이렇게 상속을 사용하면 재사용성이 엄청나게 올라간다.
추상화는 객체 지향 관점에서 클래스를 정의하는것이며, 불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는것 이라고는 하지만 너무 사전적인 뜻이라 제가 포스팅 한것이 있어 링크를 걸겠지만 추상화를 한마디로 설명해보겠습니다. 추상화는 클래스 안에 메서드가 들어가지만 메서드의 구현부는 없고 메서드 이름만 선언 되어 상속을 받은 곳에서 자유롭게 메서드의 구현부를 작성해서 사용하는것이다.
https://velog.io/@moki/abstract%EC%99%80-interface 제가 포스팅한 글입니다.
하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있다.
대표적으로 오버 라이딩, 오버 로딩이 있다.
이것 또한 포스팅을 한게 있는다. 근데 저 뜻을 대표적으로 많이들 쓰는데 처음보는 사람이 진짜 이해를 할까?라는 생각을 했습니다. 저는 이해를 못하기도 했지만.. 그래서 제가 나름 풀어서 짧게 한줄 정리를 해보고 제가 포스팅한 링크를 걸겠습니다. 오버 라이딩은 클래스 안에 메서드가 있는데 다른 클래스에 상속을 해줘서 상속받은 클래스 안에서 부모 클래스의 메서드를 자유롭게 재사용이 가능하다. 재사용이 가능하다는게 부모 클래스(상속해준 클래스)에서 aaa메서드가 있고 System.out.prinln("야호");가있다면 상속받은 클래스에서 aaa메서드를 야호에서 호야로 바꿔서 재사용이 가능하다입니다. 오버로딩은 클래스를 만들때 멤버변수가 있는데 만약 멤버변수가 5개가 있는데 어떤곳에서는 2개만 3개만 4개만 사용할수가있는데 이때 2개만있는 매개변수 3개만있는 매개변수를 찾아가서 사용이 가능하게 한다.
https://velog.io/@moki/%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9 제가 포스팅한 글입니다.
이제 마무리 정리를 한번 하겠습니다. 캡슐화는 아직까지도 솔직히 사용에 대한 이유를 자세히는 모르겠습니다. 근데 사용하는 이유는 있겠죠?? 그러니까 더 공부를 해보겠습니다. 상속 추상화 다형성(오버 라이딩)은 전부 다 연관이 있어보였다. 근데 추상화와 다형성은 이름만 다르고 거의 비슷하게 느꼈다. 결국 상속을 받아 안에 내용을 변경하여 재사용한다. 결국 객체지향프로그래밍은 재사용을 하여 코드를 깔끔하게 가독성있게 만들 수 있을 꺼 같다는 생각을했습니다.