Java 웹 개발

[코드프레소 웹 개발 체험단] - Java 프로그래밍 초급

m_yell 2022. 1. 21. 14:12

 

 

 

- 코드프레소 Java 웹 개발 체험단 활동 중

- 코드프레소 이러닝 강의 수강 중 'Java 프로그래밍 초급'

 

이 글은 코드프레소 Java 웹 개발 체험단 강의 중 'Java 프로그래밍 초급' 강의 내용입니다.

 


[ 객체지향의 기초 개념 ] 

  • 절차 지향 vs 객체 지향

 

절차 지향 : 시스템의 행위에 집중

객체 지향 : 시스템에 참여하는 요소들에 집중

 

 

  • 클래스

- Java 프로그램의 기본 단위

- 1개 이상의 클래스로 구성됨. 일반적으로 1개의 클래스는 1개의 Java 파일

- 클래스로 객체를 생성 (객체를 어떻게 생성할 지에 대한 정보를 가진 설계도)

 

( * 객체 : 사물 또는 개념 )

객체는 속성(=데이터)과 행동(=메소드)을 가지고 있음

예를 들어, 강사라는 객체에 대해서

강사의 속성은 나이, 키, 이름, 전공, 주소 등...이 될 수 있고, 행동은 수업 가르치기, 채점하기, 밥 먹기, 잠자기 등...이 된다.

 

 

  • Java 클래스 선언 문법
[접근제어자] class 클래스이름 {
	
    타입 변수이름1;
    타입 변수이름2;
    ...
    
    리턴타입 메소드이름1(파라미터) {
    	//메소드 구현 코드
        
    }
    ...
}

- class 키워드 사용

- class 안에 변수는 멤버 변수(인스턴스 변수)라고 지칭

- 메소드는 메소드(인스턴스 메소드)라고 지칭

- class 이름은 대문자로 시작하며 Camel 작명법을 사용하고 주로 명사를 쓴다.

- 이름은 의미있는 단어로 작명

 

(예시) User class 생성 (User.java)

public class User {
	String name;
    int age;
    String address;
    int weight;
}

 

  • 클래스를 만들어놓고 클래스로부터 객체를 생성할 때는
클래스명 변수명 = new 클래스명( );

new 키워드를 사용해 객체를 생성하고 변수명에는 객체에 대한 참조 정보가 저장된다.

 

위의 user 클래스로 예를 들면,

User kim = new User();

 

  • 객체 멤버 변수에 접근할 때는 점 연산자( . ) 사용
객체참조변수명.멤버변수명

객체 멤버 변수에 새로운 값을 저장할수도 있고 변수에 저장되어 있는 값을 사용할 수도 있다.

 

User kim = new Uesr();
kim.age = 20;  // kim이라는 객체의 age에 20이라는 값 저장

 

  • 메소드

( 메소드 리턴값 파라미터, 오버로딩, 

 

함수와 비슷하지만 메소드는 특정 객체 내부에 존재, 객체 멤버 변수에 대한 연산 가능

[접근제어자] 리턴타입 메소드이름(파라미터1, 파라미터2,...) {

	메소드 구현코드;
    ...
    
    [return 리턴값];
}

- input은 없거나 1개 이상의 파라미터

- output은 없거나 return 값으로 표시 

- 리턴 값이 없을 경우 리턴 타입은 void

- 메소드의 이름은 소문자로 시작하고 Camel 표기법을 사용하며 동사를 보통 사용

 

객체참조변수명.메소드명(인자)

점 연산자를 사용해 메소드를 실행

 

this : 객체 내부의 this는 객체 자신을 의미

 

  • 접근제어자

객체 내부에는 외부에서 함부로 접근해 값을 변경하면 안되는 속성이 존재 → 속성을 보호하기 위해 접근 제어자 사용

public, private, protected, default가 존재

 

- public : 모든 곳에서 접근 가능

- protected : 상속관계에서 자식이 부모 멤버에 접근 가능

- private : 외부에서 접근 불가, 객체 내부에선 접근 가능, 보통 멤버 변수는 private로 지정

* private 멤버 변수의 값을 변경/사용하고 싶을 때 : setter, getter 메소드 사용

- default : 접근 제어자 명시하지 않을 때 해당, 같은 패키지 내에서만 접근 가능

 

  • 생성자
public 클래스이름(파라미터1, 파라미터2, ...) { 
	생성자 내부 코드;
}

- 생성자의 이름은 클래스 이름과 동일

- 객체가 생성되는 시점에 호출되고 초기화를 위해 사용

- 멤버 변수를 명시하지 않는 경우 숫자형은 0, boolean은 false, string 참조 변수는 null이 저장된다

 

 

생성자를 추가하지 않은 경우 Default(기본) 생성자를 제공

User kim = new User();  //기본 생성자

[ 객체지향 고급 ] 

  • 상속

(1) 상속

일반화된 클래스(부모 클래스)를 재사용하여 새로운 구체적인 클래스(자식 클래스)를 생성하는 것

자식 클래스는 부모 클래스의 모든 멤버변수와 메소드를 상속받음

상속을 거듭할수록 자식 클래스의 멤버변수와 메소드는 늘어나거나 같음

상속 횟수에는 제한 없음

 

class 자식 클래스명 extends 부모 클래스명 { ... }

위 코드를 사용해 상속받을 수 있다.

 

(예시)

class User {  // 부모 클래스인 User 클래스 선언
	String name;
    int age;
    String address;
    
    void printInfo() {
    	System.out.println("이름은 : " + name);
    	System.out.println("주소는 : " + address);
    	System.out.println("나이는 : " + age);
}


class PaidUser extends User {   //User 클래스(부모 클래스)를 상속받은 PaidUser 클래스(자식 클래스)
	String membership;
}

 

 

* 단일 상속 : Java는 다중상속을 허용하지 않음. 하나의 클래스로부터만 상속 받을 수 있음.(예시)

class User {  //User 클래스
	int age;
}

class Person {   //Person 클래스
	String name;
}

// 자식 클래스인 Admin 클래스 생성
class Admin extends User, Person {  //에러발생 (다중상속 불가능)
	String phoneNumber;
}

User, Person이라는 클래스가 정의되어 있을 때 클래스를 상속받는 자식 클래스인 Admin 클래스는 둘 중 하나의 클래스만 상속받을 수 있다.

 

(2) 상속 관계와 접근 제어

상속 관계에서도 접근을 제한하기 위해 접근 제어자(public, private, protected, default) 사용

 

- private : 외부로부터 접근 제한, 같은 클래스 내에서만 접근 가능, 자식 클래스에서도 접근 제한.

   * private 멤버변수에 대해 외부 접근이 필요한 경우 public setter, getter 메소드 사용

 

- protected : 외부 접근을 제한, 자식 클래스에선 접근 가능. 

 

(3) 상속 관계의 생성자 

자식 클래스 객체 생성 시, 부모 클래스의 기본 생성자 자동 호출. (부모 생성자가 정의되어있지 않은 경우)

super();

super();를 사용해 부모 클래스의 기본 생성자 호출

 

 

☞ 자식 클래스에서 부모 클래스를 호출하지 않으면 Java 컴파일러가 super();를 자식 클래스 생성자 첫 번째 라인에 자동으로 삽입.

class User {  // 부모 클래스

}

class PaidUser extends User {  // 자식 클래스
	PaidUser() {
    	super();  // 부모 클래스의 기본 생성자 생성
        System.out.println("PaidUser 기본 생성자 생성");  // 자식 클래스의 기본 생성자 생성
    }
}

부모 클래스의 생성자가 정의되어있으면 자식 클래스 객체 생성 시 생성자와 파라미터에 맞게 부모 생성자 선언해줘야함.

 

super를 사용해 부모 클래스의 멤버 변수에 접근할 수도 있음.

class User {  // 부모 클래스
	String name;
	int value;
}

class PaidUser extends User { // 자식 클래스
	String number;
	int value;
}

 

부모 클래스와 자식 클래스에 동일한 변수인 value가 있을 때 자식 클래스의 메소드에 아래 코드를 넣게 되면

public setValue (int parentvalue, int myvalue) {

	super.value = parentvalue;
	this.value = myvalue;
}

 

parentvalue는 부모 클래스인 User 클래스의 value에, myvalue는 자식 클래스인 PaidUser 클래스의 value에 값이 저장된다.

 

 


 

- 코드프레소 URL : https://www.codepresso.kr/ 

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr