일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- service
- Repository
- 자료형
- JWT
- 도커
- MySQL
- Java
- toyproject
- 채팅
- recoil
- 배열
- springboot
- 네티 클라이언트
- controller
- 백엔드 설정
- 네티 서버
- netty
- 코틀린
- 스프링부트
- 프로젝트
- 팀프로젝트
- react
- axios
- 기초설정
- 클래스
- Security
- Kotlin
- Spring
- Spring Boot
- Today
- Total
hyuko
객체지향의 개념과 메소드 & 클래스 본문
메소드
- 메소드란?
- 하나의 일정한 행동들을 정리해서 모아 놓은 것을 함수라고 한다.
자바에서는 모든 함수는 클래스안에서 정의 되기에 일반 함수는 존재 하지 않는다.
그렇기 때문에 자바에서 함수란 메소드를 말한다. - 메소드의 기본 형태
public static 반환형 메소드명 (매개변수) {
실행문;
}
메소드의 특징
- 메소드는 반환형을 가지고 있을 수도 없을 수도 있다.
- 메소드는 매개변수를 가지고 있을 수도 없을 수도 있다.
- 일반적으로는 메소드명을 똑같이 쓸 수 없다.
단! 매개변수가 달라지게 되면 메소드명을 똑같이 쓸 수 있다.(메소드 오버로딩) - 반환은 하나의 반환만을 한다.
- 매개변수는 여러가지 사용이 가능하다.
- 각각의 메소드는 다른 지역이기 때문에 같은 변수명을 사용이 가능하다.
- 메소드의 호이스팅
- 클래스는 항상 컴파일 과정에서 정의되어 있는 녀석들을 먼저 정의 한 후에
메인함수를 실행 시키기 때문에 메소드가 메인함수의 위쪽이나 밑쪽이나 관계없이
어디에서든 쓸 수 있다. - 메소드 예제 코드
// 매개변수: x, 반환: x
public static void method1() {
System.out.println("단순 실행");
System.out.println();
}
// 매개변수: int num 하나 , 반환: x // 지역변수
public static void method2(int num) {
System.out.println("num: " + num);
System.out.println();
}
// 매개변수: int num, int num2 두개, 반환 : x
public static void method3(int num, int num2) {
System.out.println("num: " + num);
System.out.println("num2: " + num2);
System.out.println();
}
// 매개변수: x , 반환형: String
public static String method4() {
return "데이터 반환";
}
public static String method5(int age) {
return age + "살";
}
public static void main(String[] args) {
method1(); // 메소드(함수) 호출
method2(1);
method3(100,200);
System.out.println(method4());
System.out.println();
String data1 = method4();
System.out.println(data1);
System.out.println();
System.out.println(method5(20));
System.out.println();
}
- 코드 실행시 콘솔화면
- 메소드 오버로딩 예제코드
public static void ov1() {
System.out.println("매개변수 없음");
}
public static void ov1(int num) {
System.out.println("int 매개변수 하나");
}
public static void ov1(int num, String b) {
System.out.println("int 먼저 그다음 String");
}
public static void main(String[] args) {
ov1();
ov1(10);
ov1(10,"b");
}
- 예제 코드 실행 화면
위와 같이 메소드 오버로딩이 가능한 이유는, 각각의 메소드명에 들어가는
매개변수가 다르기 때문에 호출당시에 적용할 매개변수에 따라 구분이 가능해서
쓸 수가 있다.
객체지향언어
- 객체지향언어 : 순차지향언어에 오브젝트 개념이 추가된 것이다.
- 객체 : 객체란 세상에 존재하는 모든 것을 의미한다.
프로그래밍 관점에서는 객체들의 관계성을 사용하여 순차적으로 수행되는
프로그램내에서 객체들 간에 관계를 형성하여 프로그램을 동작하게한다.
객체 = 데이터 + 기능
ex) 객체 = 자동차
데이터(변수) = 색상, 모델명, 제조사명
기능(메소드) = 엔진가동, 브레이크작동, 기어변속, 에어컨실행등
객체지향언어의 특징
- 상속: 부모와 자식 관계 (데이터의 관계성)
상위 클래스에서 모든 것을 상속받아서 사용하는 것 (확장의 개념) - 캡슐화: 데이터와 기능을 보호, 외부로부터 접근은 차단하고 권한 또는
절차 없이 데이터를 변경 또는 기능수행을 할 수 없게 한다. (데이터의 은닉성)
(데이터들을 관련이 있는 집단별로 응집하여 캡슐에 담아둔다고 생각) - 추상화: 추상적인 요소들을 묶어서 분류하는 것(데이터의 구조화)
여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용 - 다형성: 객체의 기능이 다양한 형태를 가질 수 있다(상속과 깊은 관계를 가지게 된다.)
부모 클래스로 부터 상속받은 데이터와 기능을 자식 클래스에서 재정의해서
사용가능하다. (메소드 오버로딩, 오버라이드, 형변환 등)
객체지향언어 장점
(절차지향언어의 상대적인 부분)
- 재사용성: 상속을 통해서 코드의 재사용을 높일 수 있다.
- 생산성 향상: 클래스 단위의 부품들을 조립
- 유지보수의 우수성: 구조화 된 소스코드 클래스 단위로 소스 코드를 관리할 수 있다.
객체지향언어 단점
- 객체를 세분화하여 설계해야한다.
- 실행 속도가 절차지향언어 대비 느리다.
- 상속으로 인하여 관계가 많이 형성되면 코딩의 난이도가 높아진다.
클래스
클래스란?
클래스 (참조 자료형) : 객체에 대하여 정의해 놓은 설계도 혹은 틀
- 클래스의 기본적인 틀 : 클래스는 변수와 메소드로 이루어져 있다.
object객체와 인스턴스
object 객체: 클래스를 통하여 구현 할 수 있는 모든 대상
즉, 해당 클래스로 구현한 인스턴스를 대표하는 의미 (메모리가 할당이 되지 않은 상태)
인스턴스 : 객체가 실제로 구현이 된 것, 존재하는 것 (실제로 메모리 공간을 할당 받은 상태)
클래스의 호출
클래스명 변수명 = new 클래스명();
자료형 변수명 값 (생성자)
자료형인 클래스가 컴파일 시점에 스택이라는 공간에 할당이 된다.
그 클래스를 선언한 것이 변수명이고 그 변수명에 새로운 생성자를 생성해서
대입을 하는 구조이다.
이때 , 생성자는 동적 메모리 영역에서 할당을 받게 되고 , 그 메모리의 주소를
스택영역에 있는 변수에 담아준다.
그래서 선언한 변수명. 을 붙이면 해당 생성자의 주소 값에 참조가 가능하고
그 생성자에 있는 변수, 메소드 등을 이용할 수 있다.
※ 생성자의 특징:
1. 생성자는 클래스명과 일치한다(절대 변하지 않는다.)
2. 형태는 메소드 형태이다.
3. 기본적으로 정의가 되어야 쓸 수 있지만 , 생성자는 기본적으로 생략이 되어있어 사용가능하다.
- 클래스 코드 예제
// User 클래스정의
public class User {
String username;
String password;
String name;
String email;
// 기본 생성자
User() {}
// 모든 정보를 담는 생성자
User(String username, String password, String name, String email) {
this.username = username;
this.password = password;
this.name = name;
this.email = email;
}
// 담아진 정보를 출력하는 메소드
void printUserInfo() {
System.out.println("아이디: " + username);
System.out.println("비밀번호: " + password);
System.out.println("이름: " + name);
System.out.println("이메일: " + email);
System.out.println();
}
}
================================================
// User 클래스를 쓸 Main 클래스
public class UserMain {
public static void main(String[] args) {
User userA = new User();
// 생성 될 당시에 값을 대입
User userB = new User("sunsin12", "1234", "이순신", + "sunsin12@gmail.com")
// 직접 변수를 참조해서 대입
userA.username = "hong12";
userA.password = "1212";
userA.name = "홍길동";
userA.email = "hong12@gmail.com";
userA.printUserInfo();
userB.printUserInfo();
}
}
- 예제코드 실행시 콘솔화면
'Java > Java 중급편' 카테고리의 다른 글
배열 심화, 클래스의 활용 (0) | 2023.04.24 |
---|---|
생성자와 배열 접근 지정자 (0) | 2023.04.24 |
표준 입력 및 제어문 (0) | 2023.04.24 |