솔직히 이미 다 아는 내용이긴 한데 이제 곧 있으면 sql 파트를 공부할 것이고 무엇보다,
내가 api를 많이 알고 있지 못한다고 해도 객체지향개념만 완벽하게 이해하고 있다면
찾아서 쓰는건 문제가 하나도 안될것입니다…. 근데 객체지향개념이 조금이라도 잘못 잡히면???
프로그래밍은 절망에 빠질수도 있을것 같다는 생각이 들어서 다시 한번더 정확하게 개념을 잡고자 글을 써봅니다.
객체 지향 프로그래밍:
모든 데이터를 객체로 취급하며, 바로 이 객체가 객체지향프로그래밍의 중심이 됩니다.
객체의 상태(state), 행동(behavior) 을 구체화 하는 형태의 프로그래밍이 객체지향프로그래밍 ! 이라고 말 할수 있죠.
Class 클래스:
클래스는 객체를 정의하는 틀 혹은 설계도와 같은 의미입니다.
자바에서는 이러한 클래스를 가지고 여러개의 객체를 생성하고 사용합니다.
클래스안에는 객체의 상태를 나타내는 “필드” 와 객체의 행동을 나타내는 “메소드” 로 구성이 됩니다.
필드는 클레스에 포함된 변수!
메소드는 어떠한 특정 작업을 하기위한 명령문의 집합! 이라고 할 수 있습니다.
그러면 객체는 뭐고 인스턴스는 뭐죠???
일단 범위로만 따져보면 객체 안에 인스턴스라는 개념이 존재하는건데요.
모든 데이터를 자바에서는 객체라고 표현을 할 수 있지만,
인스턴스는 특정 클래스에서 생성된 객체를 가지고 인스턴스라고 합니다.
둘다 객체라는 사실은 변함이 없지만 그것을 표현할 수 있는 범위의 차이가 존재합니다!
메소드는 어떻게 구현하나요?
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}
- 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시합니다.
- 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다.
- 메소드 이름 : 메소드를 호출하기 위한 이름을 명시합니다.
- 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시합니다.
- 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합입니다.
자바에서는 하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없습니다.
하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있습니다.
메소드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것입니다.
이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있습니다.
또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.
객체지향프로그래밍의 장점은 뭔가요?
만약에 객체지향개념이 없다고 쳐봅시다.
예를 들어 회사가 있다고 하고 그 회사에는 직원이 100명이 있습니다.
직원a는 아침에 출근을 해서 자신이 지정된 팀의 자리에 앉습니다.
업무라는 작업을 9시에서 10시까지 진행을 하고, 이 업무라는 것은 ppt를 이용하여 발표자료를 만드는것이고,
10시가 되면은 업무2 를 시작하는데, 업무 2라는것은 엑셀을 이용하여 일을 하는것입니다.
자 근데 직원이 100명이였죠???
객체지향개념이 없다면 위에 명시된 내용을 모든 인원들에게 한명한명 다 설명을 해줘야 하는 겁니다….
“너는 9시에서 10시 까지 ‘업무’라는것을 진행하는데 업무라는것은 ppt를 사용하는거고 ppt를 사용하는 방법은 ~~고, 그 방법을 이용해서
발표 자료를 만들고 ~~~~~”
이런걸 100명에게 전달을 다 해줘야 하는겁니다…
하지만 객체지향개념이 있다면??
쉽게 신입사원 클래스!
라는것을 만들어서 업무, 업무2 라는 작업을 수행할 내용이 있는 메소드를 지정해놓고,
직원 c한테 신입사원 클래스를 부여하면, 자 너는 업무2 메소드 를 진행해! 라고하면 자동으로 업무2가 뭔지 찾아가서 그 내용을 진행하게 되는것이죠.
그러면 일일히 업무라는것에 대해 설명해줄 필요도 없고 시간도 절약되고 잘못전달 되는 일이 없겠죠??
업무2 라는 내용의 메소드가 1개 이기 때문이죠.
'Java' 카테고리의 다른 글
Static 이란? (0) | 2023.01.13 |
---|---|
2ndArray 2차원배열 (0) | 2023.01.13 |
AutoBoxing, AutoUnboxing 이란? (0) | 2023.01.13 |
JAVA Generic (제너릭) 이란 (0) | 2023.01.13 |
JAVA의 컴파일러, JVM (Java Virtual Machine) (0) | 2023.01.13 |