java - OOP 객체지향 프로그래밍

songmin jeon·2023년 12월 1일
0

1. OOP


1.1. 패러다임(PARADIGM)


  • 패러다임이란?
    -> 사람들의 견해나 사고를 근본적으로 규정하는 테두리

  • 절차지향 : 코드를 한 곳에 한 번에 작성하는 방식
  • 객체지향 : 각각 역활을 가진 클래스를 조합하여 기능 구현

1.2. 객체지향 프로그래밍


1.2.1. 객체란?

  • 여러가지 데이터들이 모여있는복잡한 자료형
  • 내가 만드는 나만의 새로운 자료형
  • 내가 새롭게 만드는 나만의 도구
    ex) Scanner(), Random(), Math()

  • class : 실제 오브젝트를 제작하기 전 설계하는 도면.
  • Object (객체) : 클래스를 기반으로 실제로 메모리에 할당되는 것.

1.2.2. 클래스와 객체

  • Class : 나만의 자료형을 만들기 위한 설계도
  • Object : 설계도를 바탕으로 실제로 만들어진 데이터, 메모리를 할당 받는 것.

클래스와 객체는 붕어빵과 붕어빵을 찍는 기계라고 많이 표현된다.

  1. 붕어빵을 찍어내는 기계는 붕어빵이라는 객체들을 생성하기 위한 틀을 제공하기 때문에 클래스라 표현

  2. 붕어빵 틀에서 만들어진 붕어빵들은 각각이 객체가 된다고 볼 수 있다.


1.3.객체지향 중요 4가지


참고링크 url : 링크


1.3.1. 캡슐화 (정보은닉)

캡슐화 란?

  • 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현내용을 외부로부터 감추는 기법.(정보은닉)

  • 만일 상황을 대비해서 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓는것.

  • 외부에서 공개된 메소드(기능)의 인터페이스를 통해 접근한 수 있다.


지금까지 내부로직을 명확하게 모르더라도 공개된 메소드를 공개적으로 사용해왔음...!


1.3.2. 상속

간.단.히, 말하면 => 기능을 물려 받는다 !

상속이란?

  • 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법

  • 기존코드를 그대로 재사용하거나 재정의-> 재사용 + 확장


1.3.3. 추상화

추상화란?

차량의 브랜드가 무엇이든 결국은 자동차..!

  • 객체에서 공통된 속성과 행위를 추출하는 기법
  • 상세한 정보는 무시하고 필요한 정보들만 산추려서 구성
  • 코드상에서 구현 부분을 제외한 오직선언 부분만을 설계

1.3.4. 다양화

동일한 버튼에

다형성이란?

  • 사전적인 의미 '다양한 형태로 나타날 수 있는 능력'
  • 같은 기능을 호출하더라도 객체레 다라 다르게 동작하는것
  • 상위클래스의 동작을 하위 클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.

1.4. 객체지향프로그밍의 장점



1.5. 실습해보기


// 개인 정보를 가진 클래스 Member
// 메세지 보내기 및 이모티콘 메소드 기능가짐
public class Member {

	// 나만의 자료형 설계도면
	// --> main method를 포함하지 않음.
	// --> 자체적으로 실행되지 않음.

	// OOP (Object Oriented Programming)
	
	// 1. 필드 Field(DATA, 속성)
	String name;	// 이름
	int age;		// 나이
	String id;		// 아이디
	String pw;		// 패스워드
	
	// 2. Method(Logic, 행위, 기능)
	// 카카오톡에서 메시지 보내기 
	public void kakaoTalk(String msg) {
		System.out.println(name + " 님이 " + msg + " 를 전송합니다.");
	}
	
	// 3. 이모티콘 보내기 메소드
	public void sendEmo(String emo) {
		System.out.println(name + " 님이 " + emo + " 을 보냅니다.");
	}
}
// 개인 정보를 가진 클래스 Member를 
// 객체로 레퍼런스 선언하여 사용!
// 해당 main으로 개인정보 및 메소드 호출해보기 !
public class Main {
	// 실행 할 수 있는 공간이다...!!
	public static void main(String[] args) {
		
		// 1. 객체(Object)를 생성(선언)해보기
		// --> 클래스 설계도면을 기반으로!
		// 회원 자료형 만들기! 변수명 : member1
		// 자료형 변수명 = new(레퍼런스) 자료형();
		Member member1 = new Member();
		// member1 --> 주소값이 저장되어 있는 레퍼런스 변수
		
		// 주소값 출력 => OOP.Member@6121c9d6
		System.out.println(member1);
	
		// 2. 객체 안에 있는 필드에 접근하는 방법
		// 레퍼런스 변수명.필드
		// .  --> 점의 의미는 접근의 의미! 가지고 있는!
		System.out.println(member1.name);
		// field 에 아무런 값도 넣지 않았을때는 기본값이 세팅된다.
		// String --> null
		// int --> 0
		// double --> 0,0
		
		// 3. 객체 안에 있는 필드 데이터를 변경하기
		member1.name = "전송민";
		System.out.println(member1.name);
		// 나이 : 20 / id : smhrd / pw : 12345
		// 전부 출력
		member1.age	=	20;
		member1.id	=	"smhrd";
		member1.pw	=	"12345";
		System.out.println(member1.age);
		System.out.println(member1.id);
		System.out.println(member1.pw);
		
		System.out.println();
		
		// 하나의 클래스 설계도면으로 여러개의 객체 생성가능
		// 짝꿍 데이터를 저장하는 member2 객체 생성
		// 안에 저장 되어 있는 데이터 모두 출력
		Member member2 = new Member();
		member2.name = "변현호";
		member2.age = 20;
		member2.id = "qwer";
		member2.pw = "12345";
		System.out.println(member2.name);
		System.out.println(member2.age);
		System.out.println(member2.id);
		System.out.println(member2.pw);
		
		// 메소드 실행
		member2.kakaoTalk("안녕~!");
		
	}
}

  • 그림에서 초록색 동그라미는 누구나 접근할 수 있는 자료형 변수를 뜻함 !

  • 주소값을 들어가면 이런 데이터들이 있다.

  • 맴버하는 클래스의 데이터 표기함

  • 객체를 써주고 . 을 찍어서 메소드를 호출가능

profile
제가 한 번 해보겠습니다.

0개의 댓글