원지의 개발
article thumbnail
728x90

배경

  • Assembly - 0과 1로 이루어진 기계어를 일상 용어로 만들기 위해 일대일로 매칭하는 코드표
  • 기존에는 기계의 종류에 맞는 프로그램 소스 파일이 필요했는데, C언어의 등장으로 하나의 소스 파일(싱글 소스)만 가지면 알아서 컴파일러로 소스를 생성
    인간 언어 체계와 기계어의 매칭이 1:1 → m:n 변환
  • CBD
  • SOA

클래스 vs 객체

나이의 유무에 따라 구분

  • 클래스 - 분류에 대한 개념 (실체x), 같은 속성과 기능을 가진 객체를 총칭하는 개념
  • 객체(속성 + 기능) - 실체 = 클래스의 인스턴스

추상화: 모델링

  • 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합 하는 것
  • 클래스 설계에서 추상화가 사용됨

Spring

  • IoC/DI
  • AOP
  • PSA - 일관서 있는 서비스 추상화

출처: 유튜브 얄팍한 코딩사전


자바와 절차적 / 구조적 프로그래밍

  • 절차적 프로그래밍 - goto를 쓰지 말자 ▶ 프로그램의 실행 순서가 인간이 이해하기에 복잡해질 가능성이 있음
  • 구조적 프로그래밍 - 함수를 쓰자 ▶ 중복코드 제거, 논리 분할
                                     공유 사용시 문제 발생이 쉬운 전역변수보다 지역변수를 쓰라

변수 위치

메모리 구조

코드 실행 영역 Static 영역 
Stack 영역 Heap 영역

static

  • 모든 클래스의 놀이터 (java.lang / 그 외 만들어진 클래스들)

stack

  • 모든 메서드들의 놀이터
  • 여는 중괄호를 만날때마다 스택 프레임이 스택 영역에 할당
  • 스택 프레임의 제일 아래에 args를 저장할 변수 공간을 확보
package springbootStudy;

//java.lang + 클래스들이 stack 영역에 할당
public class Start1 {

	//main( 이때 stack frame을 stack 영역에 할당 
	//stack frame의 맨 밑에 메서드의 인자 args를 저장할 변수 공간을 확보
	public static void main(String[] args) {
		System.out.println("Hello OOP!");
	}
}

예제 1

package springbootStudy;

public class Start3 {

	public static void main(String[] args) {
		int i = 10;
		int k = 20;
		
		if(i == 10) {
			int m = k + 5;
			k = m;
		} else {
			int p = k + 10;
			k = p;
		}
		
		//k = m + p;
	}
}

멀티 스레드 / 멀티 프로세스

  • 멀티 스레드 - 스택 영역을 스레드 개수만큼 분할해서 쓰는 것
                          하나의 스레드에서는 다른 스레드의 스택 영역에 접근할 수 없지만 스태틱 영역과 힙 영역은 공유
                          따라서 멀티 프로세스 대비 메모리를 적게 사용
  • 멀티 프로세스 - 다수의 데이터 저장 영역, 다수의 T 메모리를 갖는 구조

추상화

클래스 멤버 = 정적 멤버 = static 멤버

  • UML 표기법에서 정적 멤버에 대해서는 밑줄 사용
  • 정적 메서드는 JVM 구동시 T메모리의 static 영역에 바로 배치되기 때문에 객체의 존재 여부에 관계 없이 쓸 수 있음
  • 클래스의 인스턴스를 만들지 않고 사용하게 되는 유틸리티성 메서드

상속

  • 상위 클래스의 특성을 하위 클래스에서 상속하고, 거기에 더해 필요한 특성을 추가, 확장해서 사용하는 것
  • 확장, 분류도, 집합 등
객체 지향의 상속은 상위 클래스의 특성을 재사용하는 것
객체 지향의 상속은 상위 클래스의 특성을 확장하는 것
객체 지향의 상속은 is a kind of 관계를 만족하는 것
728x90
profile

원지의 개발

@원지다

250x250